我们都知道如何从字符串转换为数字,即:
int str2num(const string& str)
{
stringstream is(str);
int result;
return is >> result ? result : 0;
};
我的问题我希望能够区分字符串何时无法转换为数字但不是 0 例如:
1.) "0" => 0
2.) "0dasd" => 0
3.) "" => 0
4.) "some string" => 0 but true
5.) "345" => 345
我希望能够检测到案例(4)。我唯一的想法是查找字符串!! .find()
或其他东西.. stringstream 是否有某种指示这种情况的方法?
编辑:一些澄清:num2str()
当对话失败和/或返回时我0
可以使用该功能,该功能也适用于return 0
ie (cases:1,2,3,4)
。但是然后在 中case 4
,我希望能够在函数内部检测到它,这样就像你说的那样抛出一个err
... 或使用 pair<> 或 out-variable 返回带外数据。
或者更清楚地说,我想检测:
如果is >> num returns 0 (ex:"0","0.0","000", "0sad","asd0ss")
它真的是零还是字符串不能转换为数字 IE 区分 0 字符串和非 0 字符串
PS> 我的困惑可能也会出现,因为我不确定在转换时哪些情况下 0-in-a-string 会被解释为 0-num 或 just-string。我是否更加困惑:)或者现在更清楚了?我想按照 Perl 零但真实的语义来实现一些东西。
EDIT2:感谢您提供有关如何准确返回越界数据的所有示例,我非常感谢它们..我的意思是真的..(我可能会使用pair<>,不想使用boost或C++11
语义)。但我更感兴趣的是“stringstream 的想法是什么0-string
以及non-0-string
如何检测差异?