КСТ, Задача
(страница 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("Въведете текст за конвертиране: ");
}
}