Как проверить является ли строка числом с

от admin

Как проверить, является ли строка числом в C#

Проверка, является ли строка числом или нет в C# #

Например, у нас есть строковая переменная “123”, и если вы хотите проверить, является ли она числовой, используйте приведенный ниже код на C#.

Начиная с C# 7 мы можем объявить переменную out в самом методе TryParse.

Проблема с приведенным выше методом int.TryParse заключается в том, что он не может проверить отрицательные значения строковых чисел.

Проверка отрицательного числа строк в C# #

Для проверки отрицательных значений числа строк мы можем использовать метод C# double.TryParse() .

Лучший способ проверить, является ли строка числом в C# #

Для проверки того, является ли строка числом, всегда используйте метод double.TryParse() , поскольку он может проверять как положительные, так и отрицательные числа.

Don’t be a Stranger. Connect me at Social Networking Sites.

�� Stay in the loop

Get a short & sweet tutorials delivered to your inbox every couple of days. No spam ever. Unsubscribe any time.

Как определить, является ли строка числом с C ++?

У меня было довольно много проблем с попыткой написать функцию, которая проверяет, является ли строка числом. Для игры, которую я пишу, мне просто нужно проверить, является ли строка из файла, который я читаю, числом или нет (я буду знать, является ли это параметром таким образом). Я написал функцию ниже, которая, как я считаю, работает плавно (или я случайно отредактировал ее, чтобы остановить ее, или я шизофреник или Windows шизофреник):

29 ответов

Самый эффективный способ — просто перебрать строку, пока не найдете символ без цифр. Если есть несимметричные символы, вы можете считать строку не числом.

Или если вы хотите сделать это способом С++ 11:

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

Зачем изобретать колесо? Стандартная библиотека C (также доступна на С++) имеет функцию, которая выполняет именно это:

Если вы хотите обрабатывать фракции или научную нотацию, используйте вместо этого strtod (вы получите результат double ).

Если вы хотите разрешить шестнадцатеричные и восьмеричные константы в стиле C/С++ ( «0xABC» ), тогда вместо этого сделайте последний параметр 0 .

Затем ваша функция может быть записана как

Вы можете сделать это с помощью С++ с boost:: lexical_cast. Если вы действительно настаиваете на том, чтобы не использовать boost, вы можете просто изучить, что он делает, и сделать это. Это довольно просто.

С компилятором С++ 11 для неотрицательных целых чисел я бы использовал что-то вроде этого (обратите внимание на :: вместо std:: ):

Я просто хотел использовать эту идею, которая использует итерацию, но какой-то другой код выполняет эту итерацию:

Он не устойчив, как это должно быть при проверке знака десятичной точки или минуса, поскольку он позволяет иметь более одного из каждого и в любом месте. Хорошо, что это единственная строка кода и не требует сторонней библиотеки.

Выньте ‘.’ и ‘-‘, если допустимы целые положительные числа.

Я бы предложил подход с регулярным выражением. Полное регулярное выражение (например, используя boost:: regex) с помощью

будет показывать, является ли строка числом или нет. Это включает в себя положительные и отрицательные числа, как целое, так и десятичное.

(только целое число)

(только положительное целое число)

С помощью этого решения вы можете проверить все: от отрицательных до положительных чисел и даже числа с плавающей запятой. Когда вы меняете тип num на integer, вы получите сообщение об ошибке, если строка содержит точку.

Здесь другой способ сделать это с помощью библиотеки <regex> :

Я нашел следующий код наиболее надежным (С++ 11). Он ловит как целые числа, так и поплавки.

Вот решение для проверки положительных целых чисел:

Читать:
Ricoh aficio mp3351 как сбросить пароль администратора

предполагая, что любая строка, начинающаяся с 0, является числом, Просто добавьте проверку для этого случая

ofc «123hello» вернется, как заметил Тони Д.

Простейший, о котором я могу думать в С++

Как и в случае с ответом Дэвида Ректора, он не устойчив к строкам с несколькими точками или минус-знаками, но вы можете удалить эти символы, чтобы просто проверить целые числа.

Однако я частично согласен с решением, основанным на решении Ben Voigt, используя strtod в cstdlib, чтобы посмотреть десятичные значения, научную/инженерную нотацию, шестнадцатеричную нотацию (С++ 11) или даже INF/INFINITY/NAN (С++ 11):

Мы можем использовать класс stringstream.

Как мне было показано в ответе на мой родственный вопрос, я чувствую, что вы должны использовать повышение:: преобразование:: try_lexical_convert

как это работает: stringload → overload может преобразовывать строки в различные типы арифметических операций он делает это, читая символы последовательно из строкового потока (ss в этом случае), пока не закончится символ ИЛИ следующий символ не будет соответствовать критериям, которые будут сохранены в тип переменной назначения.

объяснение переменной «мусор»:

Почему бы просто не проверить, имеет ли значение извлечения в моем двойном значение действительное значение, а затем возвращает true, если оно есть?

Обратите внимание, что пример3 выше все еще успешно прочитает номер 11 в переменной my_number, даже если входная строка «11ABCD» (которая не является числом).

для обработки этого случая мы можем сделать другое извлечение в строковой переменной (которую я назвал мусором), которая может читать все, что могло быть оставлено в буфере строк после первоначального извлечения в переменную типа double. Если что-то осталось, он будет считаться «мусором», что означает, что полная строка, прошедшая мимо, не была числом (она начинается только с одного). в этом случае мы хотели бы вернуть false;

добавленное «0» объяснение «:

попытка извлечь один символ в двойник не сработает (возврат 0 в наш double), но все равно будет перемещать позицию буфера строки после символа. В этом случае наше чтение мусора будет пустым, что приведет к неправильной ошибке функции true. чтобы обойти это, я добавил 0 к строке, чтобы, если, например, строка, переданная в «a», она была изменена на «0a», так что 0 будет извлечен в double, а «a» будет извлечен в мусор.

добавление 0 не повлияет на значение числа, поэтому число будет по-прежнему правильно извлечено в нашу двойную переменную.

std::isdigit

Проверяет, является ли данный символ одной из 10 десятичных цифр: 0123456789 .

Поведение не определено, если значение ch не может быть представлено как unsigned char и не равно EOF .

Parameters

ch характер классификации

Return value

Ненулевое значение,если символ является числовым,ноль в противном случае.

Notes

isdigit и isxdigit являются единственными стандартными функциями классификации узких символов, на которые не влияет установленный в настоящее время языковой стандарт C. хотя некоторые реализации (например, Microsoft в кодировке 1252) могут классифицировать дополнительные однобайтовые символы как цифры.

Как и все другие функции из <cctype> , поведение std::isdigit не определено, если значение аргумента не может быть представлено как unsigned char и равно EOF . Чтобы безопасно использовать эти функции с обычными char (или signed char ), аргумент должен быть сначала преобразован в unsigned char :

Точно так же они не должны напрямую использоваться со стандартными алгоритмами, когда типом значения итератора является char или signed char . Вместо этого сначала преобразуйте значение в unsigned char :

Check if string is number in C++

Check if string is a number in C++

For example: Character, Boolean, Floating Point, Double Floating Point, Integer, String etc.

Each one of these data types occupy a specific amount of memory space, determining the size and the layout of the variable’s memory map. To specify these data types in the program we make use of keywords. These variable data types help us to manipulate data however we please.

Related Posts