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

Converting a std::string to int in 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() return 是有效的 IPv4 或 IPv6 地址,则该函数有效。例如,我将输入 1e1.4.5.6 拆分为标记 1e1456。因为 1e1 不正确,所以我需要 return false。不幸的是,上面的方法 returns true 因为它处理 1e1 只是一个 1.

你快到了。完成转换后,您需要检查流中是否还有任何数据。如果有,那么您就知道您的输入无效。所以如果

the_stream.eof()

true 然后你消耗了输入并且你有一个有效的结果。如果不是,那么您的输入无效。

您也可以使用 C 函数 strtol:

std::string token = "1234";
char *endp = 0;
int value = strtol( token.c_str(), &endp, 10 );
if( **endp ) { // invalid symbol detected
    ...
}