在 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
拆分为标记 1e1
、4
、5
和 6
。因为 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
...
}
我正在寻找一种方法,将表示整数(比如“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
拆分为标记 1e1
、4
、5
和 6
。因为 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
...
}