Member 13657990 Ответов: 2

Как проверить, является ли входной сигнал 3-значным числом для целочисленной переменной "а", если я хочу рассматривать такие числа, как "001", также как 3-значные числа?


Итак, я создаю проект обработки файлов на языке C++. В нем есть такая переменная: int roll.
Он должен иметь 3 цифры. Я думал использовать такие методы, как if(roll>99||roll<1000), но это бесполезно. Он принимает 091 как 2-значное число, 003 как 1-значное, очевидно. Итак, как я могу проверить, является ли входной сигнал 3-значным числом для целочисленной переменной "а", если я хочу рассматривать такие числа, как "001", также как 3-значные числа?

Что я уже пробовал:

Я думал использовать такие методы, как if(roll>99||roll<1000), но это бесполезно. Он принимает 091 как 2-значное число, 003 как 1-значное, очевидно.

PeejayAdams

Будет ли 52 действительным или его нужно будет ввести как 052? Если оба они действительны, то вы просто смотрите на любое число меньше 1000. Если это должно быть 052, то на самом деле вы ищете строку, а не int, регулярное выражение ([0-9][0-9][0-9]) это был бы правильный путь.

Leo Chapiro

Ваш вопрос не ясен: целое число не может выглядеть как "001", а только как "1", "001" - это строка. Вы можете преобразовать его в целое число: "001" -> 1. это то, что вам нужно?

Richard Deeming

Так в чем же дело if (roll > 0 && roll < 1000) ?

CPallini

Действительно. :-)
Я бы использовал

if ( roll >= 0 && roll < 1000)

2 Ответов

Рейтинг:
1

OriginalGriff

Это зависит от того: если Вы читаете значение из файла, то вам нужно будет сделать тест if, который вы показываете, в значительной степени.
Если вы генерируете случайное число (и имя roll затем сгенерируйте случайное число от 0 до 899 включительно, а затем добавьте к нему 100. Таким образом, вам гарантировано значение с ненулевой самой значимой цифрой.

Без соответствующих фрагментов кода это все, что мы можем сказать - есть слишком много разных вещей, которые вы могли бы делать!


Рейтинг:
0

Jochen Arndt

Если это целочисленная переменная, то проверка на наличие < 1000 и для того, чтобы не быть отрицательным или нулевым в зависимости от ваших требований, этого достаточно .

Числовые типы в языках программирования не имеют ведущих нулей. Но строковые представления могут иметь. Если у вас есть строка, представляющая число и которая должна содержать начальные нули, вы можете использовать strtol - ссылка на C++ [^] функция:

// Skip any non-digits because strtol will skip leading white spaces
//  and accept signs. This won't work for negative numbers.
while (*szInput && !isdigit(*szInput))
    ++szInput;
char *stop;
long num = strtol(szInput, &stop, 10);
if (stop - szInput == 3)
{
    // Has three digits
}