Что такое код isalpha


Функции isalpha () и isdigit () в C / C ++ с примером

isalpha (c) — это функция в C, которая может использоваться для проверки, является ли переданный символ алфавитом или нет. Он возвращает ненулевое значение, если это алфавит, иначе он возвращает 0. Например, он возвращает ненулевые значения для «a» — «z» и «A» — «Z» и ноль для других символов.

Аналогично, isdigit (c) — это функция в C, которую можно использовать для проверки, является ли переданный символ цифрой или нет. Он возвращает ненулевое значение, если это цифра, иначе возвращает 0. Например, он возвращает ненулевое значение для «0» — «9» и ноль для других.

Пример задачи: Для заданной строки str найдите количество букв алфавита и количество десятичных цифр в этой строке.

isalpha: если argv не является алфавитом. Как подготовить?

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

Если argv [1] не является алфавитом, отклоните его (верните 1).

Как мне это сделать? Извините, я новичок в компьютерном программировании и C в частности.

РЕДАКТИРОВАТЬ: Второй аргумент — это строка. Я должен проверить, что пользователь вводит строку, а не числовое значение. Если пользователь вводит число или строку с номером (например, bacon11), моя программа должна отклонить его и вернуть 1; Что я должен делать?

Мой код выглядит так:

Что я должен написать в строке TODO? Я не могу обусловить код!

Решение

Вы можете использовать ISALPHA функция.

РЕДАКТИРОВАТЬ: Ваш код, кажется, в хорошем состоянии. Тем не менее, я не буду выполнять вашу работу, но я могу дать вам некоторые подсказки!

  • Проверьте это уроки чтобы понять утверждение if (вы также можете проверить ISALPHA пример).
  • Не забывайте, что argv — это двумерный массив символов. Таким образом, чтобы получить конкретный символ аргумента, вы можете сделать: argv[i][j]
  • Проверить возвращаемое значение из ISALPHA функция для проверки персонажа.

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

В самом общем смысле это может быть сложной проблемой, поскольку
определение «буквенный» может зависеть от локали и будет
зависит от кодировки, используемой средой; если кодировка
это UTF-8 (распространенный случай сегодня), это может быть очень сложно, так как
вам приходится иметь дело с многобайтовыми символами.

С другой стороны, вы утверждаете, что второй аргумент
алфавитное ключевое слово. Если есть фиксированное количество ключевых слов
(иначе они не были бы ключевыми словами), самое простое решение
просто искать аргумент в таблице ключевых слов; если ты
не найти, это ошибка. Что-то вроде:

Или, если под «алфавитным», вы подразумеваете один из 26 символов в
Английский алфавит (и может исключать акцентированные символы, или
Кириллица, или китайский, или что-то в этом роде), который часто
случай, когда один касается только ключевых слов, то вы можете
проверьте, является ли каждый символ буквенным, используя isalpha
функция (правильно, конечно):

Илон Маск рекомендует:  headers_sent - Проверяет, отправлены ли HTTP заголовки

Как написано, это работает только в C ++ 11; со старыми версиями
С ++, это сложнее. И это очень ограничено; обычно
Первое, что делает опытный программист на C ++, это устанавливает глобальный
локаль к тому из его пользователя, который, вероятно, не «C».

IntlChar::isalpha — Check if code point is a letter character

IntlChar::isalpha — Check if code point is a letter character

Описание

Determines whether the specified code point is a letter character. TRUE for general categories «L» (letters).


Список параметров

The integer codepoint value (e.g. 0x2603 for U+2603 SNOWMAN), or the character encoded as a UTF-8 string (e.g. «\u<2603>«)

Возвращаемые значения

Returns TRUE if codepoint is a letter character, FALSE if not.

Примеры

Пример #1 Testing different code points

Результат выполнения данного примера:

Смотрите также

  • IntlChar::isalnum() — Check if code point is an alphanumeric character
  • IntlChar::isdigit() — Check if code point is a digit character

Когда безопасно использовать ‘isalpha()’

1 CroCo [2020-05-27 15:45:00]

У меня есть GLFW key_callback() и я пытаюсь определить, нажат ли алфавитный символ. Я использую эту функцию isalpha(). Я заметил, что некоторые клавиши, такие как Shift и Alt, рассматриваются как алфавитные символы, если я выполняю следующий код:

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

2 ответа

key_callback не является стандартной частью C++, поэтому я искал и предполагал, что тот, о котором вы говорите, является частью библиотеки GLFW. В этой библиотеке key_callback дает клавиатурный scancode.

Scancodes — это не символы. В типичной модели ввода есть машина состояний, которая отображает scancodes (и последовательности и комбинации scancodes) персонажам. Это слой, который позволит вам изменить вашу QWERTY-клавиатуру, чтобы работать как клавиатура Dvorak или как таковая, предназначенная для ввода на другом языке. Этот key_callback является более низким уровнем и оставляет отображение вам.

Функция C++ std::isalpha принимает привязку char к int или специальное значение EOF , которое обычно является -1. (В некоторых системах вы обнаружите, что вам нужно сначала перенести свой char на char unsigned char прежде чем преобразовать его в int .) Scancodes — это не символы, поэтому передача scancode в std::isalpha бессмысленна.

В частности, значение 340 выходит за пределы unsigned char , и это не EOF , поэтому действительно нельзя ожидать ничего разумного.

Если вам нужны символы, вам нужно будет создать собственное сопоставление от scancodes (и комбинации scancodes) до символов. Похоже, что у этой библиотеки есть константы, определенные для scancodes. Например, GLFW_KEY_LEFT_SHIFT — 340. Это должно помочь. Если вам просто нужно знать, нажата ли или нажата конкретная клавиша, вы можете сравнить scancodes с соответствующими константами.

Примечание. Вы отметили вопрос C++, но вы связались с документацией для версии isalpha на C.

1 Walter [2020-05-27 17:00:00]

Просто чтобы обобщить мудрость из обсуждения в комментариях в короткий ответ.

  1. У вашего кода есть неопределенное поведение (UB) по причинам, обсуждаемым в комментариях.
  2. Поэтому результат непредсказуем и, скорее всего, неверен.
  3. Код с UB следует избегать как можно больше.


Не понятно, что вы подразумеваете под safe . Маловероятно, что это немедленно приведет к катастрофе, но UB в каком-то важном коде (например, программе, управляющей самолетом).

ASCII и ISALPHA если проблема заявление

Я пишу программу, которая принимает введенный пользователем символ, например, A, и введенный номер пользователя, например, 7. Программа проверяет действительность характера, если настоящие пробеги THRU, пока она не попадает в эту петлю внутри функции. Я использую ASCii десятичной для этого цикла внутри функции. Этот цикл должен проверить IsAlpha и если он выполняется код внутри <> ‘s, это правильно делать. Еще не работает так, как я хочу, и я не уверен, как это исправить. Мне нужно еще (не альфа), чтобы добавить 1 назад к прилавку в цикле и увеличить ASCII на 1. Если я запускаю его, как это так, он отдает повторную попытку / игнорировать / отменить ошибку. Если я запускаю его без пит ++; он работает и останавливается после завершения цикла. Так что, если вы положили в Z и выбрать 3, он проходит через петлю 3 раза и выходы нужно всего лишь Z. Любые мысли о том, как это исправить?

Мне это нужно выводить что-то вроде: Input: Z Входной сигнал: 4 он должен выводить: ZABC на экран. Он должен игнорировать другие ASCii не являющихся алфавитных символов.

Если вам нужно петлю обратно в «A» в Z изменить ваши DeC++ к

Или вы могли бы получить фантазии и использовать оператор модуля

Я думаю , что проблема может быть , что этот оператор вставки stringstream , >>, не имеет перегрузку , которая обрабатывает символ. Это преобразование полукокса на короткий или ИНТ затем вставив его. Попробуйте использовать строку :: присоединять (размер size_t, символ с) вместо этого. Это должно обрабатывать вставки полукокса.

Что такое код isalpha

Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.4.2007
Где: Мурманск

Репутация: нет
Всего: 1

Код
#include
#include
#include

int main()
<
printf(«Установлена локаль: %s\n», setlocale(LC_ALL, «RU»));
char input_char;
do
<
input_char = getchar();
if (isalpha(input_char))
<
printf(«%c», input_char);
>
> while (input_char != EOF);
return 0;
>

Проблема в том, что не все буквы алфавита обрабатываются. В частности вот сравнение ввода и вывода:

Код
Ввод:
абвгдеёжзийклмнопрстуфхцчшщъыьэюя

Вывод:
Установлена локаль: Russian_Russia.1251
абвгдежзийкнпрстуфхцчшъыэю

Вывод:
Установлена локаль: Russian_Russia.1251
ГЁЖИКМОРСТУФЦШЩЪЭЯ

В чем проблема? файлы имеют кодировку ANSI, подаю путем

Код
main.exe > output.txt

P.S. Если ввожу буквы напрямую через консоль результаты немного другие, но всё равно не все буквы определяет (кодировка консоли 1251)

Профиль
Группа: Участник
Сообщений: 136
Регистрация: 12.4.2007
Где: Мурманск

Репутация: нет
Всего: 1

APXEOLOG
Дата 10.12.2010, 15:29 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Комодератор
Сообщений: 7006
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 35
Всего: 222

xvr
Дата 13.12.2010, 13:16 (ссылка) | (нет голосов) Загрузка .
Цитата(APXEOLOG @ 10.12.2010, 15:29)
Проблема решена. Данный баг лечится преобразовыванием к unsigned char

Данный баг лечится определением input_char как int. А ‘преобразование к unsigned char’ в вашей проге обрежет ваш входной файл по первой же букве ‘я’

Google
Дата 13.11.2020, 09:10 (ссылка)

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

C++ How to check if letter isalpha (not latin alphabet)

so I need to see if my character is a letter. I tried using isalpha() function, however, if I try to pass not latin letter (for example ą, č, ę, ė, į, š, ų, ū, ž) I get an error, that seems to state that isalpha function accepts only chars that in ASCII code are between 0 and 255. Is there any way to overcome this problem?

На этот вопрос есть ответы на Stack Overflow на русском: Как определить, есть ли буквы в строке? C++

Когда безопасно использовать ‘isalpha()’

У меня есть GLFW key_callback() и я пытаюсь определить, нажат ли алфавитный символ. Я использую эту функцию isalpha(). Я заметил, что некоторые клавиши, такие как Shift и Alt, рассматриваются как алфавитные символы, если я выполняю следующий код:

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

key_callback не является стандартной частью C++, поэтому я искал и предполагал, что тот, о котором вы говорите, является частью библиотеки GLFW. В этой библиотеке key_callback дает клавиатурный scancode.

Scancodes — это не символы. В типичной модели ввода есть машина состояний, которая отображает scancodes (и последовательности и комбинации scancodes) персонажам. Это слой, который позволит вам изменить вашу QWERTY-клавиатуру, чтобы работать как клавиатура Dvorak или как таковая, предназначенная для ввода на другом языке. Этот key_callback является более низким уровнем и оставляет отображение вам.

Функция C++ std::isalpha принимает привязку char к int или специальное значение EOF , которое обычно является -1. (В некоторых системах вы обнаружите, что вам нужно сначала перенести свой char на char unsigned char прежде чем преобразовать его в int .) Scancodes — это не символы, поэтому передача scancode в std::isalpha бессмысленна.

В частности, значение 340 выходит за пределы unsigned char , и это не EOF , поэтому действительно нельзя ожидать ничего разумного.


Если вам нужны символы, вам нужно будет создать собственное сопоставление от scancodes (и комбинации scancodes) до символов. Похоже, что у этой библиотеки есть константы, определенные для scancodes. Например, GLFW_KEY_LEFT_SHIFT — 340. Это должно помочь. Если вам просто нужно знать, нажата ли или нажата конкретная клавиша, вы можете сравнить scancodes с соответствующими константами.

Примечание. Вы отметили вопрос C++, но вы связались с документацией для версии isalpha на C.

IntlChar::isalpha

IntlChar::isalpha — Проверить, является ли символ буквой

Описание

Проверяет, является ли символ буквой. TRUE для категории «L» (буквы).

Список параметров

Целочисленное задание кода символа (например 0x2603 для U+2603 СНЕГОВИКА), или символ закодированный строку UTF-8 (например «\u<2603>«)

Возвращаемые значения

Возвращает TRUE , если codepoint является буквой, FALSE — если нет.

Примеры

Пример #1 Тестирование различных способов задания

Результат выполнения данного примера:

Смотрите также

  • IntlChar::isalnum() — Проверить, является ли символ буквой либо цифрой
  • IntlChar::isdigit() — Проверить, является ли символ цифрой

Python ISALPHA метод ()

описание

метода Python ISALPHA () для определения строки состоит только из букв.

грамматика

ISALPHA () метод Синтаксис:

параметры

Возвращаемое значение

Если есть по крайней мере одна строка символов, и все символы являются буквами возвращает истина, в противном случае значение False

примеров

В следующем примере показан метод ISALPHA экземпляра ():

Примеры приведенных выше результатов вывода являются следующие:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Правила форума «C/C++: Для новичков»