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