在C ++ 03中将std :: string转换为int

时间:2017-07-26 17:01:54

标签: c++ stringstream c++03

我正在寻找一种方法来将整数的字符串表示(例如," 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)拆分为令牌1e1456。由于1e1不正确,我需要返回false。遗憾的是,上述方法会返回true,因为它只会1e1处理1

2 个答案:

答案 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
    ...
}