3

重複の可能性:
C++ で文字列を int に解析する方法は?

C++03 で string を 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 に答える