ПРОВЕРКА НА ХАРАКТЕРА И ПРЕОБРАЗУВАНЕ

М. ПОЧАКАЙ С. ПРАТА Д. МАРТИН
C език - ръководство за начинаещи
Книга: Езикът C - Ръководство за начинаещи
ПРОВЕРКА НА ХАРАКТЕРА И ПРЕОБРАЗУВАНЕ
ПРОВЕРКА НА ХАРАКТЕРА И ПРЕОБРАЗУВАНЕ
Заглавният файлctype.h съдържа няколко функции за дефиниране на макроси, които проверяват към кой клас принадлежи символ. Функциятаisalpha(c), например, връща различна от нула (истина), ако c е буквен знак и нула (фалшиво), ако знакът не е буква. По този начин,
isalpha('S') != 0 но isalpha('#') ==0
Функциите, които най-често се срещат в този файл, са изброени по-долу. Във всеки случай функцията връща ненулева стойност, ако c принадлежи към запитвания клас, и нула в противен случай.
isalpha(c) | писмо |
isdigit(c) | фигура |
е по-слаб (c) | малки букви |
isspace(c) | празен знак (интервал, табулация или нов ред) |
isupper(c) | Главна буква |
Вашата система може да има допълнителни функции като
изален (c) | буквено-цифрови (буква или цифра) |
isascii(c) | ASCII код (0-127) |
iscntrl(c) | контролен характер |
ispunct(c) | препинателен знак |
Още две функции извършват трансформации
горна част (c) | преобразува c в главни букви |
tolower(c) | преобразува c в малки букви |
В някои системи трансформациятаизпълнява се само ако знакът е в обратен регистър (главни или малки) от мястото, където трябва да започне. По-безопасно е обаче първо да проверите регистъра.
По-долу (Фигура 15.3.) е програма, която използва някои от тези функции, за да конвертира цял файл в главни или малки букви, както желаете. За да получим малко разнообразие, ние използваме разговорен подход, вместо да използваме аргументи от командния ред, за да предоставим на програмата информация.
/* Преобразуване на малки букви в главни букви и обратно */
#include /* включва файла с дефиниция на макроси */
инт крит; /* за задаване на главни или малки букви */
char file1[14], file2[14]; /* имена на входни и изходни файлове */
критичен = избор(); /* избор на главни или малки букви */
getfiles(файл1, файл2); /* получава имена на файлове */
конв(файл1, файл2, критичен); /* извършва трансформацията */
printf("Програмата ще преобразува целия файл в главни букви или n");
printf(" за малки букви. Въвежда U, ако са необходими главни буквиn");
printf(" или въведете L, ако са необходими малки букви. n");
printf("Моля, въведете U или L.n");
; /* изхвърля последния знак за нов ред */
char *име, име2;
printf(" Това е" %s" .n", име1);
printf("Кое име искате да изберете за конвертирания файл? n");
while(strcmp(gets(name2), name1) == NULL)
printf(" Моля, изберете друго име.n" );
printf(" Вашият изходен файл" %s ".n", име2);
> conv(име1, име2, крит);
char *име1, име2;
if((f1 =fopen(име1, "r" )) == NULL)
printf(Съжалявам, не мога да отворя % s. Довиждане.n", име1);
while((ch = getc(f1)) != EOF)
ch = islower(ch)? toupper(ch) : ch;
ch = isupper(ch)? tolower(ch) : ch;
ОРИЗ. 15.3. Програма за преобразуване на малки букви в главни и обратно.
Разделихме програмата на три части: каране на потребителя да посочи вида на трансформацията, получаване на името на входните и изходните файлове и извършване на трансформацията. За да постигнем всичко това, създадохме различни функции за всяка част. Функцията select() е доста проста, с изключение може би на цикъл
Този цикъл е включен, за да реши проблема, който срещнахме в гл. 14. Когато потребителят отговори на въпроса за вида на трансформацията, да речем, с букватаU, той натиска клавишаU и след това клавиша [enter ], който изпраща'n'.
Оригиналната функцияgetchar() извличаU, но оставя'n' за четене на следващия ред. Функциятаgets() вgetnames() ще интерпретира'n' като празен низ, така че използвахме малък цикълwhile, за да се отървем от знака за нов ред. Наистина, простgetchar() би направил това, ако потребителят натисне [enter ] директно задU. Но нашата версия също ви позволява да натиснете интервала няколко пъти преди [enter ].
Функциятаconv( ) е функция за копиране и конвертиране. Стойносттаcrit се използва за определяне на необходимото преобразуване. Работата се извършва чрез просто условно изявление като
ch = islower(ch)? toupper(ch) : ch;
Той проверява далиch е малка буква.Ако е така, знакът се преобразува в главна буква. Ако не, остава както е.