在C ++ 03中将字符串转换为int

时间:2012-11-07 21:36:56

标签: c++ string int type-conversion c++03

  

可能重复:
  How to parse a string to an int in C++?

在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”问题。

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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;