我正在寻找一种方法来将整数的字符串表示(例如," 123")转换为C ++ 03中的整数。
我知道使用stringstreams
的常用方法:
string token="1234";
stringstream sss(token);
int tokenInt;
sss>>tokenInt;
cout<<"Int token is: "<<tokenInt<<"\n";
然而,问题在于它似乎不适用于像1e1
这样的值。它只打印出1
。工作演示here。遗憾的是stoi
被排除在外,因为我正在使用C ++ 0x。还有其他方法吗?
谢谢!
编辑:我基本上处理IPv4和IPv6地址。如果函数ipValidator()
是有效的IPv4或IPv6地址,则它将返回有效。我将输入(例如1e1.4.5.6
)拆分为令牌1e1
,4
,5
和6
。由于1e1
不正确,我需要返回false。遗憾的是,上述方法会返回true
,因为它只会1e1
处理1
。
答案 0 :(得分:1)
你几乎就在那里。完成转换后,您需要检查流中是否还有任何数据。如果有,那么你知道你有无效的输入。所以,如果
the_stream.eof()
是true
然后您在输入上消耗了并且您有一个有效的结果。如果没有,则输入无效。
答案 1 :(得分:1)
您也可以使用C函数strtol
:
std::string token = "1234";
char *endp = 0;
int value = strtol( token.c_str(), &endp, 10 );
if( **endp ) { // invalid symbol detected
...
}