Буквы в русском тексте - C (СИ)
Формулировка задачи:
Требуется написать программу, которая считывает русский текст и вычисляет частоту появления в этом тексте каждой из 33 букв русского алфавита
Решение задачи: «Буквы в русском тексте»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>//tolower()
#include <windows.h>
/*Требуется написать программу, которая считывает русский текст и вычисляет частоту появления в этом тексте каждой из 33 букв русского алфавита*/
int main()
{
SetConsoleCP (1251);
SetConsoleOutputCP(1251);
char A[70];
int alfavit[33];
char buf;
int count=0;
printf("Введите строку:\n");
fgets(A,70,stdin);
A[strlen(A)-1]='\0';//поскольку последний символ '\n' а при выводе строки будет дополнительный пустая строка, то я затираю его (символ '\n')
memset(alfavit,0,sizeof(int)*33);//заполнить массив alfavit нулями
//считаем
for(int i=0;i<strlen(A);i++)
{
buf=tolower(A[i]);//tolower нужен чтоб небыло разницы между А и а
if(buf=='\0') break;
if(buf==-72) alfavit[6]+=1;//если ё
else if (buf>=-26) alfavit[buf+33]+=1;
else
alfavit[buf+33-1]+=1;
}
//вывод таблицы (результат подсчетов)
for(int i=-32;i<0;i++)
{
if (i==-26) {
printf("%c - %d\n",char(-72),alfavit[6]),count++;
printf("%c - %d\n",char(i),alfavit[32+i+count]);
}
else
printf("%c - %d\n",char(i),alfavit[32+i+count]);
}
printf("\n%s\n\n",A);
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с консолью, строками и вводом-выводом.
- Установка кодировки консоли в UTF-8.
- Объявление переменных: массив символов A, массив для подсчета букв alfavit, переменная count для отслеживания количества введенных символов.
- Ввод строки от пользователя с помощью функции fgets().
- Очистка последнего символа новой строки в массиве A с помощью функции A[strlen(A)-1]='\0'.
- Инициализация всех элементов массива alfavit значением 0 с помощью функции memset().
- Основной цикл программы, который проходит по каждому символу в массиве A.
- Приведение символа к нижнему регистру с помощью функции tolower().
- Проверка на конец строки и выход из цикла при обнаружении символа '\0'.
- Проверка на символ
ёи увеличение значения в соответствующем элементе массива alfavit. - В противном случае, если символ больше или равен -26, увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра.
- В противном случае, увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра, но с добавлением 33.
- Вывод таблицы с частотой появления каждой буквы алфавита.
- Внешний цикл, который проходит по всем символам алфавита от -32 до 0.
- В случае, если текущий символ равен -26, вывод значения в элементе массива alfavit, соответствующем символу
ё, и увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра. - В противном случае, вывод значения в элементе массива alfavit, соответствующем текущему символу без учета регистра.
- Вывод введенной строки.
- Возврат 0, что означает успешное завершение программы.