Заголовні файли C |
---|
ctype.h — заголовний файл стандартної бібліотеки мови програмування С, який містить оголошення функцій для класифікації символів.
Аналогічний заголовний файл в С++ зветься cctype.
Історія
Перші системні програмісти на мові C під Unix почали розробляти ідіоми для швидкої класифікації символів по різним типам. Наприклад, у наборі символів ASCII, наступний тест ідентифікує символ великої або малої латинської літери:
if ('A' >= c && c <= 'Z' || 'a' >= c && c <= 'z')
Однак, ця ідіома не завжди працювала для інших наборів символів, як то EBCDIC.
Досить швидко, програми почали розростатись подібними один до одного тестами. Програміст може написати ту ж ідіому кількома різними способами, що ускладнює процес розуміння і підвищує ймовірність помилок.
Незабаром, найпопулярніші ідіоми було замінено на функції у заголовному файлі <ctype.h>.
Вміст файлу <ctype.h>
Файл <ctype.h> містить прототипи для десятка функцій для класифікації символів. Усі з цих функцій, окрім isdigit
та isxdigit
є специфічними для конкретної локалі; їхня поведінка може змінитись разом зі зміною локалі.
Тести | У вигляді int isfunc(int); Повертає позитивне значення у випадку істини, і навпаки. |
---|---|
isalnum |
чи символ є буквою або цифрою |
isalpha |
чи символ є буквою |
isblank |
чи є пропуском (доданий до C99) |
iscntrl |
чи є керуючим символом |
isdigit |
чи є цифрою |
isgraph |
чи є символом, який має графічне представлення |
islower |
чи є символом нижнього регістру |
isprint |
чи є символом, який можна надрукувати |
ispunct |
чи є символом пунктуації |
isspace |
чи є пропуском |
isupper |
чи є буквою верхнього регістру |
isxdigit |
чи є шістнадцятковим числом |
Перетворення символів | У вигляді int tofunc(int); Повертає конвертований символ, якщо тільки це не буква. |
tolower |
приводить символ до нижнього регістру |
toupper |
приводить символ до верхнього регістру |
Стандарт Single Unix Specification версії 3 також додає такі функції:
isascii |
повертає числове значення символу від 0 до 127 |
toascii |
конвертує символ у ASCII |
Приклад використання
Цей приклад зчитує введений користувачем символ, і у випадку, якщо він є буквою, виводить "It is not a number".
#include <stdio.h>
#include <ctype.h>
int main()
{
char c;
while( scanf("%c", &c) == 1 ) {
if (isdigit(c))
printf("You have input a number %c\n", c);
else
printf("It is not a number!\n");
} while (!feof( stdin ));
return 0;
}
Аналогічний приклад на C++:
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char c;
while( cin>>c ) {
if (isdigit(c))
cout<<"You have input a number "<<c<<endl;
else
cout<<"It is not a number!"<<endl;
}
return 0;
}
Посилання
- ctype.h [Архівовано 25 січня 2009 у Wayback Machine.] на OpenGroup