Буквы в русском тексте - 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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с консолью, строками и вводом-выводом.
  2. Установка кодировки консоли в UTF-8.
  3. Объявление переменных: массив символов A, массив для подсчета букв alfavit, переменная count для отслеживания количества введенных символов.
  4. Ввод строки от пользователя с помощью функции fgets().
  5. Очистка последнего символа новой строки в массиве A с помощью функции A[strlen(A)-1]='\0'.
  6. Инициализация всех элементов массива alfavit значением 0 с помощью функции memset().
  7. Основной цикл программы, который проходит по каждому символу в массиве A.
  8. Приведение символа к нижнему регистру с помощью функции tolower().
  9. Проверка на конец строки и выход из цикла при обнаружении символа '\0'.
  10. Проверка на символ ё и увеличение значения в соответствующем элементе массива alfavit.
  11. В противном случае, если символ больше или равен -26, увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра.
  12. В противном случае, увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра, но с добавлением 33.
  13. Вывод таблицы с частотой появления каждой буквы алфавита.
  14. Внешний цикл, который проходит по всем символам алфавита от -32 до 0.
  15. В случае, если текущий символ равен -26, вывод значения в элементе массива alfavit, соответствующем символу ё, и увеличение значения в элементе массива alfavit, соответствующем символу без учета регистра.
  16. В противном случае, вывод значения в элементе массива alfavit, соответствующем текущему символу без учета регистра.
  17. Вывод введенной строки.
  18. Возврат 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы