Возможный дубликат:
Как разобрать строку в int в C ++?
Существует множество способов конвертировать строки в int в C ++ 03. Лучшее, что я нашел до сих пор, это:
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».
Вы можете проверить 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;
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";