Как проверить является ли строка числом, если она содержит русские символы?

97
13 декабря 2020, 13:00

Написал функцию, которая проверяет каждый символ строки до тех пор, пока не встретит не цифру или терминирующий ноль. Если встречается не цифра, то функция возвращает 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;
}
  1. Почему русские символы не входят в данный диапозон?
  2. Почему то, что русские символы не входят в диапозон, влияет на работу функции(т.е. выдаётся ошибка)?
  3. Что нужно сделать с моим кодом, чтобы функция корректно работала со строками, содержащие русские символы?
Answer 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])))
READ ALSO
Что делает эта функция (SwapEnd)?

Что делает эта функция (SwapEnd)?

Столкнулся со следующей функцией, автор использует её при записи в данных вvtk файл

128
Связанные select2 from to

Связанные select2 from to

Есть 2 связанных списка select со значениями от и до, реализованные с помощью select2:

115
функция не передается в $(window).resize()

функция не передается в $(window).resize()

Подскажите что я делаю неправильно и в чем моя ошибка

134
CSS оформление хлебных крошек

CSS оформление хлебных крошек

Как можно сделать такую навигационную панель? ширина может увеличиваться смотря от названия категории

121