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