Библиотека Си предоставляет следующие функции для определения типа символов, описанные в стандартном заголовочном файле "ctype.h":
| int isdigit(int c); | символ c - цифра; |
| int isalpha(int c); |
c - латинская буква; |
| int isspace(int c); |
c - пробел, перевод строки и т.п.; |
| int ispunkt(int c); |
c - знак препинания; |
| int isupper(int c); |
c - прописная латинская буква; |
| int islower(int c); |
c - строчная латинская буква; |
| int toupper(int c); | если c -- лат. буква, то преобразовать c к прописной букве; |
| int tolower(int c); | если c -- лат. буква, то преобразовать c к строчной букве. |
Функции, начинающиеся с префикса is, возвращают ненулевое значение (т.е. истину), если символ с кодом c принадлежит указанному классу, и нулевое значение (ложь) в противном случае. Функции toupper и tolower преобразуют латинские буквы к верхнему или нижнему регистру, на остальных символах они действуют тождественно.
В качестве примера использования функции isspace модифицируем программу "wc.cpp", подсчитывающую число строк и символов в текстовом файле. Добавим в нее подсчет слов. Будем считать словами любые связные группы символов, разделенные пробелами, табуляциями или разделителями строк.
// // Файл "wc2.cpp" // Подсчет числа символов, слов и строк в текстовом файле // #include <stdio.h> // Описания функций ввода-вывода #include <ctype.h> // Описания типов символов
int main() { char fileName[256]; // Путь к файлу FILE *f; // Структура, описывающая файл int c; // Код введенного символа int numChars = 0; // Суммарное число символов := 0 int numLines = 0; // Суммарное число строк := 0 int numWords = 0; // Суммарное число слов := 0 bool readingWord = false; // Читаем слово := false
printf("Введите имя файла: "); scanf("%s", fileName);
f = fopen(fileName, "rb"); // Открываем файл if (f == 0) { // При ошибке открытия файла // Напечатать сообщение об ошибке perror("Не могу открыть файл для чтения"); return 1; // закончить работу программы с кодом 1 }