Напечатать текст, подчеркивая все заглавные и строчные русские буквы, входящие в него - C (СИ)
Формулировка задачи:
Дан текст из 60 букв. Напечатать этот текст, подчеркивая (ставя минусы в соответствующих позициях следующей строки) все заглавные и строчные русские буквы, входящие в него.
Решение задачи: «Напечатать текст, подчеркивая все заглавные и строчные русские буквы, входящие в него»
textual
Листинг программы
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <stdlib.h>
#define RU L"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
int main(void) {
wchar_t buf[BUFSIZ];
if ( ! setlocale(LC_ALL, "ru_RU.UTF-8") ) {
perror("setlocale");
return 1;
}
while ( printf("> ") && fgetws(buf, BUFSIZ, stdin) && *buf != L'\n' ) {
wchar_t * p = buf;
printf("> ");
while ( *p )
printf("%c", ( wcschr(RU, towupper(*p++)) ) ? '-' : ' ');
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с широкими символами.
- Определение строки, которую необходимо выделить.
- Установка локали на русскую, чтобы корректно работать с русскими символами.
- Создание буфера для ввода строки.
- Проверка успешности установки локали, при неудаче выводится сообщение об ошибке и возвращается 1.
- Ввод строки с помощью fgetws.
- Проверка успешности ввода строки, при неудаче выводится сообщение об ошибке и возвращается 1.
- Выделение строки для выделения заглавных и строчных букв.
- Перебор каждого символа введенной строке.
- Проверка, является ли текущий символ заглавной или строчной буквой.
- Если символ является заглавной буквой, то к нему добавляется символ подчеркивания.
- Вывод полученной строки с выделением заглавных и строчных букв.
- Ввод новой строки.
- Цикл продолжается, пока пользователь не введет пустую строку.
- Возвращение 0 по окончании работы программы.