3

可能重复:
如何在 C++ 中将字符串解析为 int?

在 C++03 中有多种方法可以将字符串转换为 int。到目前为止我发现的最好的是:

string text;
cin>>text;
int converted;

if ( !(istringstream(text) >> converted) ){
    cout<<"conversion failed\n";
}
cout<<"the converted string is "<<converted;

这个解决方案的问题是它接受“12monkeys”并毫不犹豫地将其转换为12。在这种情况下,是否有一些简单的方法可以检查并输出“转换失败”?

请注意,我已经尝试过 atoi()、atol() 和 strtol(),但如果失败则返回 0 的事实是徒劳的。我怎么知道字符串是否不是“0”?也没有范围检查(strtol() 除外)。没有提到那里也存在“12monkeys”问题。

4

2 回答 2

2
const char *string = "12monkeys";
char *end;
long value = std::strtol(string, &end, 10);
if (end == string)
    std::cout << "No number found\n";
else if (*end != '\0')
    std::cout << "Extra characters on end.\n";
于 2012-11-07T23:12:13.313 回答
1

您可以明确检查 eof :

string text;
cin>>text;
int converted;

istringstream iss(text);
if ( !(iss >> converted) ){
    cout<<"conversion failed\n";
}
if( iss.get() != std::stringstream::traits_type::eof() ) {
    cout<<"cocnversion failed\n";
}
cout<<"the converted string is "<<converted;
于 2012-11-07T22:13:44.107 回答