Чтение онлайн

на главную - закладки

Жанры

Язык Си - руководство для начинающих

Д. МАРТИН

Шрифт:

Таким образом, эта часть программы чередует печать в обратном направлении и печать в прямом направлении. Следует заметить, что в некоторых системах может не предусматриваться код 2 для fseek.

Теперь оставим на некоторое время файлы и перейдем к другому разделу библиотеки.

ПРОВЕРКА И ПРЕОБРАЗОВАНИЕ СИМВОЛОВ

Заголовочный файл ctype.h содержит несколько функций макроопределений, которые проверяют, к какому классу принадлежат символы. Функция isalpha(c), например, возвращает ненулевое значение (истина), если с является

символом буквы, и нуль (ложь), если символ не является буквой. Таким образом,

isalpha('S') != 0, но isalpha('#') ==0

Ниже перечислены функции, чаще всего находящиеся в этом файле. В каждом случае функция возвращает ненулевое значение, если с принадлежит к опрашиваемому классу, и нуль в противном случае.

ФУНКЦИЯ ПРОВЕРЯЕТ, ЯВЛЯЕТСЯ ЛИ С
isalpha(c) буквой
isdigit(c) цифрой
islower(c) строчной буквой
isspace(c) пустым символом (пробел, табуляция или новая строка)
isupper(c) прописной буквой

Ваша система может иметь дополнительные функции, такие как

ФУНКЦИЯ ПРОВEРЯEТ, ЯВЛЯЕТСЯ ЛИ С
isalnum(c) алфавитноцифровым (буква или цифра)
isascii(c) кодом ASCII (0-127)
iscntrl(c) управляющим символом
ispunct(c) знаком пунктуации

Еще две функции выполняют преобразования

toupper(c) преобразует с в прописную букву
tolower(c) преобразует с в строчную букву

В некоторых системах преобразование выполняется только в случае, если символ находится в регистре (прописных или строчных букв), противоположном тому, с которого следует начинать. Однако надежнее предварительно проверить регистр.

Ниже (рис. 15.3.) дана программа, использующая некоторые из этих функций для преобразования всего файла в прописные или строчные буквы, по вашему желанию. Для получения небольшого разнообразия используем диалоговый подход, вместо того чтобы применять аргументы командной строки для снабжения программы информацией.

/* преобразование строчных букв в прописные и обратно */

#include <stdio.h>

#include <ctype.h> /* включает файл макроопределений */

#define UPPER 1

#define LOWER 0

main

{

int crit; /* для установки регистра прописных или строчных букв */

char file1[14], file2[14]; /*

имена входного и выходного файлов */

crit = choose; /* выбирает прописные или строчные буквы */

getfiles(file1, file2); /* получаст имена файлов */

conv(file1, file2, crit); /* выполняет преобразование */

} choose

{ int ch;

printf("Программа преобразует весь файл в прописные буквы или \n");

printf(" в строчные буквы. Вводит U, если нужны прописные буквы\n");

printf(" или вводит L, если нужны строчные буквы. \n");

while((ch=getchar)!='U' && ch!='u' && ch!='L'

&& ch!='l')

printf(" Введите, пожайлуста, U или L.\n");

while(getchar!='\n')

; /* сбрасывает последний символ новой строки */

if(ch =='U' || ch =='u')

{ printf(" Все в порядке, есть регистр прописных букв.");

return(UPPER);

else

{ printf(" Все в порядке, есть регистр строчных букв.");

return(LOWER); } }

getfiles(namel, name2);

char *namel, name2;

{ printf(" Какой файл вы хотите преобразовать?\n");

gets(name1);

printf(" Это\" %s\" .\n", name1);

printf("Какое имя вы хотите выбрать для преобразуемого файла?\n");

while(strcmp(gets(name2), name1) == NULL)

printf(" Выберите другое имя.\n" );

printf(" Ваш выходной файл\" %s \".\n", name2);

} conv(name1, name2, crit);

char *name1, name2;

int crit;

{ int ch;

FILE *f1, *f2;

if((f1 = fopen(name1, "r" )) == NULL)

printf(Извините, я не могу открыть % s. До свидания.\n", name1);

else

{ puts(" Итак, начнем!");

f2 = fopen(name2, "w");

while((ch = getc(f1)) != EOF)

if(crit == UPPER)

ch = islower(ch) ? toupper(ch) : ch;

else

ch = isupper(ch) ? tolower(ch) : ch;

putc(ch, f2);

Поделиться:
Популярные книги

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

Кодекс Охотника. Книга XII

Винокуров Юрий
12. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XII

Его маленькая большая женщина

Резник Юлия
Любовные романы:
современные любовные романы
эро литература
8.78
рейтинг книги
Его маленькая большая женщина

Саженец

Ланцов Михаил Алексеевич
3. Хозяин дубравы
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Саженец

Свет во мраке

Михайлов Дем Алексеевич
8. Изгой
Фантастика:
фэнтези
7.30
рейтинг книги
Свет во мраке

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Вамп

Парсиев Дмитрий
3. История одного эволюционера
Фантастика:
рпг
городское фэнтези
постапокалипсис
5.00
рейтинг книги
Вамп

Инвестиго, из медика в маги 2

Рэд Илья
2. Инвестиго
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Инвестиго, из медика в маги 2

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Хозяин Теней 2

Петров Максим Николаевич
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 2

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Неудержимый. Книга XI

Боярский Андрей
11. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XI

Двойник Короля 2

Скабер Артемий
2. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Двойник Короля 2