Как проще всего использовать команды isdigit () и isalpha ()? - PullRequest
2 голосов
/ 12 мая 2010

Мне нужно краткое объяснение того, как работают две команды isdigit() и isalpha(). Конечно, я читал онлайн-источники, прежде чем задавать вопрос, но я попробовал их и не смог заставить их работать. Какой самый простой способ их использования?

Я знаю, что это возвращает значение, поэтому я предполагаю, что могу использовать его так:

if(isdigit(someinput)==1)
 return -1;

Это правильно? Могу ли я использовать это для любого типа персонажа? И можно ли сравнить его с числом с плавающей точкой или массивом?

Предположим, я хочу отсканировать текстовый файл с цифрами и буквой и определить, что я сканирую. Можно ли использовать эти две команды в этом контексте?

Ответы [ 3 ]

2 голосов
/ 12 мая 2010

Вы не обычно хотите сравнить возвращаемое значение, просто трактуйте его как логическое значение:

if (isalpha(someinput))
    do_whatever();

Если вы настаиваете на проведении сравнения, оно должно быть !=0, но оно полностью избыточно и бессмысленно.

Вы используете его для символов , которые были прочитаны с ввода, которые не являются (на тот момент) числами с плавающей точкой или чем-то еще, просто группами символов. В случае с плавающей точкой некоторые из них будут цифрами, но многие также будут включать десятичные точки (которые не являются цифрами) и, возможно, случайные e, + или -.

Также обратите внимание, что обычно вам необходимо преобразовать ввод в unsigned char перед вызовом любой из функций is*. Многие наборы символов будут обрабатывать некоторые символы как отрицательные, когда они рассматриваются как signed char, и передача отрицательного значения любому из них дает неопределенное поведение.

1 голос
/ 12 мая 2010

Это не «команды», это функции. Функции принимают аргументы и возвращают значения.

#include <ctype.h>
int isdigit( int ch );

Это подпись для функции isdigit: она указывает, что она примет значение int (или что-то, что может быть приведено к int, например char), и вернет int. Поэтому вы не можете передать ему массив (хотя вы можете вызывать его для каждого члена int[]).

Подпись для isalpha идентична (за исключением названия, очевидно).

В документации сказано следующее:

Описание: функция isalpha () возвращает ненулевое значение, если его аргумент буква алфавита. Иначе, ноль возвращается.

Это означает, что ваше сравнение не будет корректным для всех реализаций. Лучше сделать что-то вроде:

if (isdigit(someinput)) {
 return -1;
}

В C 0 будет иметь значение false в логическом выражении, а все ненулевые значения - true. Так что эта проверка будет охватывать реализации isdigit, которые возвращают -1, 5, что угодно.

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

0 голосов
/ 12 мая 2010

Вы можете использовать его для любого типа char ! (на самом деле это int, я не знаю, из соображений совместимости или нет, но чаще всего используется для символов)

Он определяет, является ли, например, «5» цифрой или буквенно-цифровой (часть алфавита). И да, вы используете правильно, если someInput имеет тип "char"

...