Написал функцию, которая проверяет каждый символ строки до тех пор, пока не встретит не цифру или терминирующий ноль. Если встречается не цифра, то функция возвращает 0. Если на всём пути не встретиалсь не цифра, возвращает 1.
Проблема в том, что она не работает со строками, которые содеражт русские символы, так как их численные значения не входят в диапозон от -1 до 255.
int is_number(const std::string& s)
{
int count = 0;
while (s[count])
{
if (isdigit(s[count]))
++count;
else
return 0;
}
return 1;
}
То, что делаете вы, проще сделать так:
bool is_number(const std::string& s)
{
return !s.empty() && (s.find_first_not_of("0123456789") == s.npos);
}
Ваша проблема, думаю, в том, что isdigit() работает с тем, что "представимо как unsigned char", так что попробуйте так -
if (isdigit(static_cast<unsigned char>(s[count])))
Продвижение своими сайтами как стратегия роста и независимости