Написал функцию, которая проверяет каждый символ строки до тех пор, пока не встретит не цифру или терминирующий ноль. Если встречается не цифра, то функция возвращает 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])))
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Столкнулся со следующей функцией, автор использует её при записи в данных вvtk файл
Есть 2 связанных списка select со значениями от и до, реализованные с помощью select2:
Подскажите что я делаю неправильно и в чем моя ошибка
Как можно сделать такую навигационную панель? ширина может увеличиваться смотря от названия категории