Написать программу которая проверяет является ли строка целым числом

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

bool isParam (string line)
Brendan Weinstein 11 янв. 2011, в 07:32
Поделиться
Я ненавижу видеть, if (expr) return true; return false; ! Просто напишите return expr; ,
ephemient 11 янв. 2011, в 06:08
Brennan Vincent 11 янв. 2011, в 06:12
Ваш прототип функции не подходит.

Почему бы не использовать bool isParam (const string s)

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

bool is_number(const std::string return !s.empty() std::find_if(s.begin(), s.end(), [](char c) < return !std::isdigit(c); >) == s.end(); >

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

Как в JS привести число к Integer и как проверить, что число является целым?

Charles Salvia 11 янв. 2011, в 07:40
Поделиться

Также не обрабатывает отрицательные числа и не целые числа. Мы не можем знать, какие требования основаны на вопросе.

Brennan Vincent 11 янв. 2011, в 06:24

Да уж. Извините, я должен был быть более конкретным. Я знаю, что цифры, которые я ищу, положительные. Это решение работает очень хорошо.

Brendan Weinstein 11 янв. 2011, в 06:36

Вы также можете использовать !s.empty() s.find_first_not_of(«0123456789») == std::string::npos; для одной строки C ++ 03.

kbjorklu 11 янв. 2011, в 07:03
Также не обрабатывает десятичные числа, например: 1.23
littlecodefarmer758 10 март 2013, в 09:31

Для обработки целых чисел со std::string::const_iterator it = s.begin(); после std::string::const_iterator it = s.begin(); строку, которую вы можете добавить, if(s[0] == ‘-‘ || s[0] == ‘+’) it++; . Просто быть уверенным, что не пустой вход поступает.

Fredrick Gauss 17 март 2013, в 22:40
Не обрабатывает десятичные числа и номера научных обозначений!
Daniel 11 апр. 2013, в 20:12
И не обрабатывает большие числа, которые не вписываются в int .
Remy Lebeau 15 май 2013, в 22:42

Charles Salvia 16 май 2013, в 18:21
Remy Lebeau 16 май 2013, в 19:08

Это решение кажется мне безобразным и негибким. Использование регулярных выражений является наиболее простым решением для анализа. Это решение не является расширяемым (попробуйте написать соответствующее число с плавающей запятой в том же стиле), не проверяет знак, имеет логические недостатки, которые были обнаружены выше, гораздо сложнее, чем регулярное выражение.

Dmytro Sirenko 31 июль 2013, в 17:45
Constantin 05 нояб. 2013, в 21:49
Fredrick Gauss 10 нояб. 2013, в 07:52
Не забудьте включить и чтобы пример C ++ 11 работал.
kR105 04 нояб. 2014, в 18:40
Scy 26 март 2016, в 18:01

Читайте также:
Процессор загружен другой программой

Уроки Javascript Как превратить строку в число

Хороший ответ должен работать для всех чисел, таких как 3.2+e15, 3.2-e27, 3.2+E45, 44.9L и т. Д.
MVTC 30 янв. 2017, в 03:40
Показать ещё 13 комментариев

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

char* p; long converted = strtol(s, if (*p) < // conversion failed because the input wasn’t a number >else < // use converted >

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

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

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

bool isParam(string line)
Ben Voigt 15 май 2013, в 22:55
Поделиться

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

chmike 24 июнь 2013, в 08:51
Ben Voigt 24 июнь 2013, в 12:21

Вопрос не был указан явно, но мое понимание требования «проверяет, является ли строка числом», означает, что вся строка является числом, то есть без пробелов. Я чувствовал необходимость указать, что ваш ответ отличается от других в этом отношении. Ваш ответ может быть хорошим, если в строке есть пробелы перед числом.

chmike 01 июль 2013, в 10:53
Jonathan Mee 13 нояб. 2014, в 21:21
Ben Voigt 13 нояб. 2014, в 21:23
Приведенный выше код не обрабатывает десятичные разряды, и strtod считает, что «NaN» — это число.
Steve Smith 07 авг. 2018, в 13:18
Ben Voigt 08 авг. 2018, в 04:00

Показать ещё 5 комментариев

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

try < double x = boost::lexical_cast(str); // double could be anything with >> operator. > catch(. )
Crazy Eddie 11 янв. 2011, в 07:54
Поделиться

Использование try<> catch<> хорошая идея?

Разве мы не должны избегать этого в максимально возможной степени?

Nawaz 11 янв. 2011, в 06:17
MSalters 11 янв. 2011, в 08:27

Наваз — здесь нет способа избежать этого. Если вы хотите избежать этого, вам нужно переписать lexical_cast. На самом деле, lexical_cast ведет себя правильно. Если значение в строке не является числом, то оно не может выполнять свою работу. Это исключительная ситуация для этой функции.

Crazy Eddie 11 янв. 2011, в 17:19
-1 за злоупотребление попробуйте поймать . blogs.msdn.com/b/ericlippert/archive/2008/09/10/…
NoSenseEtAl 28 нояб. 2012, в 09:59

try <> catch <> здесь уместно. Тем не менее, поймать (. ) просто плохая практика. В этом случае используйте boost :: bad_lexical_cast для вашего обработчика исключений.

NuSkooler 07 фев. 2013, в 17:59

Я чувствую, что это пытается читать из файла. Неважно, сколько вы проверяете файл, вы не узнаете, можно ли прочитать его, пока вы не сделаете это. Это или будет работать или нет. В этом случае вам нужно поймать исключение. Так что в этом случае я думаю, что это совершенно хороший способ сделать это.

Casey 10 май 2013, в 00:06

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

Читайте также:
Что нужно для того чтобы продавать свою программу

Dmytro Sirenko 31 июль 2013, в 17:48
Crazy Eddie 02 авг. 2013, в 00:46
c2.com/cgi/wiki?DontUseExceptionsForFlowControl — URL говорит, что все это действительно
danio 26 нояб. 2015, в 12:32
Ville-Valtteri 09 март 2017, в 06:36

Ben Voigt 16 май 2017, в 14:16
Ville-Valtteri 17 май 2017, в 06:20
Ben Voigt 17 май 2017, в 07:41
Показать ещё 11 комментариев

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

bool is_number(const std::string s)

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

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

David Rector 09 май 2013, в 16:41
Поделиться

ошибка: ‘strspn’ не был объявлен в этой области, я думаю, это потому, что мне не хватает «#include», но что

Qwertie 22 янв. 2014, в 01:42
David Rector 23 янв. 2014, в 17:21

Если вы собираетесь использовать std::string , используйте find_first_not_of член find_first_not_of .

Ben Voigt 02 апр. 2014, в 16:36

Это не получится, если вы передадите строку «12.3-4.55-», которая, очевидно, не является допустимым числом

Buzzrick 15 авг. 2014, в 00:22
Баззрик, предлагаемый ответ уже заявляет, что это не получится с тем номером, который вы упомянули.
David Rector 09 нояб. 2017, в 00:34

если вы ограничите его только «0123456789», тогда формула идеально подходит для проверки на целое число без знака

no one special 13 фев. 2019, в 10:44
Показать ещё 4 комментария

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

-?[0-9]+([.][0-9]+)?

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

[0-9]+([.][0-9]+)?

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

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

Mephane 11 янв. 2011, в 10:05
Поделиться

Гм, я пытался использовать std::regex с gcc 4.7, gcc 4.8 — они оба бросают std::regex_error на любой знак [ в регулярном выражении, даже для невинного «[abc]» (я делаю это неправильно?). clang-3.4 вообще не знает о . В любом случае, это самый разумный ответ, +1.

Dmytro Sirenko 31 июль 2013, в 17:41
Lightness Races in Orbit 01 фев. 2014, в 21:28

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

#include #include using namespace std; int main() < string s; cin >> s; stringstream ss; ss > num; if(ss.good()) < cerr else if(num == 0 s[0] != ‘0’) < cerr else < cout >
tom1991te 15 май 2013, в 22:32
Поделиться

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

bool is_integer(const std::string ^ [- +]? [0-9] + $»?

U007D 29 авг. 2015, в 23:12
Показать ещё 2 комментария

isNumber(const std::string не нужно
Xam 25 фев.

2018, в 06:25

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

bool isPositiveInteger(const std::stringline)

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

Noam Geffen 30 март 2014, в 07:38
Поделиться

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

bool isNumber(string s) < if(s.size()==0) return false; for(int i=0;i=’0′ s[i] <=’9′)==false) < return false; >> return true; >
Abhijit Annaldas 14 июль 2016, в 18:42
Поделиться
bool isNumber(const std::string s)
chappjc 25 июль 2014, в 00:46
Поделиться

Читайте также:
Как заблокировать включение программы

5 Способов проверить, является ли строка целочисленной в Python

Много раз, выполняя некоторые проекты или, возможно, простое программирование, нам нужно ограничить, является ли данная строка Python целым числом или нет. Итак, в этой подробной статье вы узнаете о пяти доминирующих способах проверки того, является ли данная строка python целым числом или нет.

Итак, не теряя времени, давайте сразу перейдем к способам проверки python, является ли строка целочисленной.

Некоторые элитные способы Python Проверить, является ли строка целочисленной

  • isnumeric функция
  • обработка исключений
  • функция isdigit
  • Регулярное выражение
  • any() и map() функции

1. Проверка Того, является ли Заданная или Входная строка Целочисленной или Не использует isnumeric функцию

Функция isnumeric() Python может быть использована для проверки того, является ли строка целым числом или нет. isnumeric () – это встроенная функция. Он возвращает True, если все символы числовые, в противном случае False.

Синтаксис

string.isnumeric()

Параметры

Метод isnumeric() не принимает никаких параметров.

Примеры

#1 print(s.isnumeric()) #2 print(s.isnumeric()) #3 print(s.isnumeric()) #4 if s.isnumeric(): print(‘Integer’) else: print(‘Not an integer’)
True True False Integer

Объяснение:

  • В первом примере мы инициализировали и объявили строку s со значением ‘69544’. После этого с помощью функции isnumeric () мы проверили, является ли ‘69544’ целым числом или нет. В этом случае это целое число so, и оно вернуло ‘True’.
  • Во втором примере проверки python, если строка является целым числом, мы инициализировали строку s со значением ‘u00BD’. Это ‘u00BD’ является значением Unicode, и вы можете записать цифры и числовые символы с помощью Unicode в программе. Таким образом, он возвращает true.
  • Третий пример аналогичен первому, но вместо объявления значения целого числа мы объединили как целое значение, так и строку. В этом случае функция isnumeric() вернет False.
  • В четвертом примере мы сделали несколько дополнительных шагов, используя if-else со слиянием функции isnumeric (). Здесь мы объявили и инициализировали нашу переменную ‘s’ со значением ‘5651’. Затем с помощью операторов управления потоком и функции isnumeric() мы проверили, является ли данная строка целым числом или нет. В данном случае это целое число. Таким образом, мы получим выходное целое число. В других случаях, если значение не является целым числом, то мы получим результат, говорящий “Не целое число”.

Примечание: Этот метод проверки того, является ли строка целым числом в Python, не будет работать в отрицательных числах.

2. Python Проверяет, Является Ли Строка Целочисленной, Используя Обработку исключений

Определите, является ли строка числовой в C++

В этом посте будет обсуждаться, как определить, является ли строка числовой в C++. Решение должно проверять, содержит ли строка последовательность цифр.

1. Использование цикла

Простое решение состоит в том, чтобы перебирать строку до тех пор, пока не встретится нечисловой символ. Если все символы являются цифрами, строка является числовой. Это решение не работает с отрицательными числами или числами с плавающей запятой.

bool isNumeric ( std :: string const
while ( it != str . end ( ) std :: isdigit ( * it ) ) <
return ! str . empty ( ) it == str . end ( ) ;
std :: string str = «100» ;
std :: cout << std :: boolalpha << isNumeric ( str ) << std :: endl ; // true

2. Использование std::find_if

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru