КСТ, Задача
(страница 79, задача 7):
Да
се създаде програма, която въвежда
символен низ. Да се преобразуват буквите
му: от малки в големи и от големи в малки.
За целта могат да се използват функциите
isupper, islower,
toupper, tolower
от ctype.h
Таблица на
съответствията
Наименование
|
Описание
|
broiach
|
Целочислена променлива,
използвана за брояч на цикъл
|
buf(1024)
|
Буфер за символният
низ със големина 1024 байта
|
p
|
Указател,
нужен за функцията strchr()
|
tmp
|
Временна
променлива тип «символ» (char)
|
Source Code на решението на задачата:
/* Author: Nikolay Hristov, 28.08.2013 * Използвана литература: * - NetBSD Library Functions Manual, NetBSD 4.0, December 24, 2004 * - Програмният език C, второ издание, Brian Kernigham, Dennis Richie, * издателство ZeST Pres, 2004 */ #include <stdio.h> /* strchr() */ #include <string.h> /* isupper(), islower(), toupper(), tolower() */ #include <ctype.h> int main(void){ int broiach; /* ... */ char buf[1024]; /* буфер */ char *p; /* указател, нужен за функцията strchr() */ char tmp; /* временна променлива тип char, нужен за isupper()/islower() */ printf("Въведете текст за конвертиране: "); /* четем от стандартния вход (stdin) символен низ със размер * buf в случая 1024 bytes */ while(fgets(buf, sizeof(buf), stdin)){ /* Функцията strchr връща указател към търсения от нас символ. * Търсим символа 'нов ред' ('\n') и ако не открие такъв - връща NULL. * Ако не открие 'нов ред' в низа, това означава, че е въведен * низ > размера на буфера buf (в случая 1024 bytes), което означава, * че е натиснат Enter след края на буфера (въведени са минимум * 1025 символа. */ if((p = strchr(buf, '\n')) == NULL){ printf("Въведен е прекалено дълъг низ.\n"); return 1; } /* При откриване на съвпадение с 'нов ред' ('\n'), * функцията strchr връща указател към тази част от масива. * Задължително терминираме низа с s \0 */ *p = '\0'; /* Отпечатваме орогиналният низ */ printf("Въведен низ : %s\n", buf); /* Инициализираме броячът */ broiach = 0; /* Цикъл, който обхожда целия низ, докато стигне \0 */ while(buf[broiach]){ /* Тък като islower/isupper работят само с char, * обхождаме целия низ символ по символ */ tmp = buf[broiach]; /* Ако символа е с малки букви ... */ if(islower(tmp)){ /* правим ги на ГОЛЕМИ БУКВИ. */ buf[broiach] = toupper(buf[broiach]); } /* Ако символа е с ГОЛЕМИ БУКВИ ... */ if(isupper(tmp)){ /* ПРАВИМ ГИ НА малки букви. */ buf[broiach] = tolower(buf[broiach]); } /* Отиваме на следващия символ */ broiach++; } /* Отпечатваме конвертирания текст */ printf("Конвертиран низ: %s\n", buf); /* Очакваме ново въвеждане */ printf("Въведете текст за конвертиране: "); } }
No comments:
Post a Comment