Определение типов символов
Библиотека Си предоставляет следующие функции для определения типа символов, описанные в стандартном заголовочном файле "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 }
while ((c = fgetc(f)) != EOF) { // Читаем символ // Цикл продолжается, пока c != -1 (конец файла)
++numChars; // Увеличиваем число символов
// Подсчитываем число символов перевода строки if (c == '\n') { ++numLines; // Увеличиваем число строк }
// Подсчитываем число слов if (!isspace(c)) { // если c не пробел if (!readingWord) { // если не читаем слово ++numWords; // увеличить число слов readingWord = true; // читаем слово:=true } // конец если } else { // иначе readingWord = false;// читаем слово:=false } // конец если }
fclose(f);
// Печатаем результат printf("Число символов в файле = %d\n", numChars); printf("Число слов = %d\n", numWords); printf("Число строк = %d\n", numLines);
return 0; // Возвращаем код успешного завершения }
Пример выполнения программы wc2 в применении к собственному тексту, записанному в файле "wc2.cpp":
Введите имя файла: wc2.cpp Число символов в файле = 1998 Число слов = 260 Число строк = 57