Основы программирования

Определение типов символов


Библиотека Си предоставляет следующие функции для определения типа символов, описанные в стандартном заголовочном файле "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


Содержание раздела