Проверка символа на число c

Я написал очень простую калькуляторную программу на C ++. Вот:

Как вы можете видеть, я хочу разрешить пользователям завершать приложение, нажимая «t». Это явно не сработает, потому что cin постараюсь назначить письмо double (если я нажимаю ‘t’, приложение вылетает). Вместо этого я планирую использовать строки для получения ввода, но как мне проверить, является ли строка буквой или цифрой?

Решение

Вот пример и рабочий код, просто измените его так, чтобы он соответствовал вашим потребностям

Другие решения

и использовать isalhpa() , isdigit() , isalnum() на содержимое строки?

Вы можете ввести в строку, а затем использовать следующую функцию:

Если строка числовая, она переведет ее в целое число.

Если строка не является числовой, она вернет 0: в этом случае вы можете проверить только первый символ строки, если он равен нулю, тогда рассматривать ввод как 0. Если первый символ не является нулем, рассмотрите строку как не числовой.

Ну, если вы проверяете только ‘t’, вы можете сделать это глупо и легко.

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

Напишите функцию boolean IsDigit(char c) (Java), function IsDigit(c:char):boolean (Pascal), bool IsDigit(unsigned char c) (C/C++), определяющую, является ли данный символ цифрой или нет.

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

Входные данные
Задан единственный символ c.

Выходные данные
Необходимо вывести строку yes, если символ является цифрой, и строку no в противном случае.

Читайте также  Почему телефон зависает и выключается

Примеры
входные данные
c
выходные данные
no
входные данные
2
выходные данные
yes

Есть такая функция:

Корректно ли такое сравнение: ‘0’ ? Судя по тому что существует функция bool isdigit( charT ch, const locale& loc ); может быть такая ситуация что char содержащий код символа 1 будет не равен ‘1’ . Или такого не может быть?

А как проверить является ли символ точкой или нет?

3 ответа 3

Эта проверка корректна, стандарты С и С++ гарантирует это (см. ответ @wololo).

Правда не понятно, зачем здесь разыменовывать i , но будем считать, что это опечатка.

может быть такая ситуация что char содержащий код символа 1 будет не равен ‘1’. Или такого не может быть?

Для C, запись ‘1’ и означает «код символа "1"», приведённый к int . С точки зрения С++ всё немного сложнее, боюсь наврать в точном определении, но, грубо говоря, это объект встроенного типа char, который при приведении к int должен дать код символа "1" (да поправят меня те, что цитируют стандарт по памяти).

А как проверить является ли символ точкой или нет?

Вариант в вопросе вполне допустим. ‘.’ == i .

Стандарт языка C++ относит символы 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 к так называемому базовому множеству исходных символов (basic source character set. Это множество состоит не только из цифр. Полный список в [lex.charset] / 1), которое в свою очередь является подмножеством базового множества символов выполнения (basic execution character set). А надмножеством базового множества символов выполнения является множество символов выполнения (execution character set).

Элемент множества исходных символов (а значит и символы 0 — 9 ), заключённый в одинарные кавычки без префикса является обычным символьным литералом ([lex.ccon]):

1) any member of the source character set except the single-quote ’ , backslash , or new-line character

A character literal that does not begin with u8 , u , U , or L is an ordinary character literal. An ordinary character literal that contains a single c-char representable in the execution character set has type char , with value equal to the numerical value of the encoding of the c-char in the execution character set. An ordinary character literal that contains more than one c-char is a multicharacter literal. A multicharacter literal, or an ordinary character literal containing a single c-char not representable in the execution character set, is conditionally-supported, has type int , and has an implementation-defined value.

Из приведённой выше цитаты следует, что литералы вида ‘0’ — ‘9’ имеют тип char и значение эквивалентное числовому значению, кодирующему эти символы в множестве символов выполнения.

Читайте также  Сколько всего сотен содержится в числе 342580

Конкретные числовые значения, которыми кодируются те или иные символы в множестве символов выполнения определяются реализацией. Однако, несколько специальных гарантий всё же есть:

  1. Коды символов из базового множества символов выполнения (а значит и коды символов ‘0’ — ‘9’ ) неотрицательны (а с учётом того, что нулевое значение имеет нулевой символ (null character), получаем что коды символов ‘0’ — ‘9’ строго положительны), и отличаются друг от друга.
  2. В множестве символов выполнения, в списке символов 0 1 2 3 4 5 6 7 8 9 каждый символ после 0 имеет код, который на единицу больше, чем предыдущий.

The basic execution character set and the basic execution wide-character set shall each contain all the members of the basic source character set, plus control characters representing alert, backspace, and carriage return, plus a null character (respectively, null wide character), whose value is 0. For each basic execution character set, the values of the members shall be non-negative and distinct from one another. In both the source and execution basic character sets, the value of each character after 0 in the above list* of decimal digits shall be one greater than the value of the previous. The execution character set and the execution wide-character set are implementation-defined supersets of the basic execution character set and the basic execution wide-character set, respectively. The values of the members of the execution character sets and the sets of additional members are locale-specific.

*Список на который ссылается цитата выглядит так: 0 1 2 3 4 5 6 7 8 9 .

Таким образом, проверка переменной i типа char на хранение арабской цифры с помощью кода

Ссылка на основную публикацию
Adblock
detector