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