Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include "stdafx.h"
#include "stdio.h"
#include "string.h"
#include "conio.h"
void main()
{
    char s1[100]; int i; char s2[10]; int m,n,b;
    gets_s(s1);
    printf("vvedite bukvu");
    gets_s(s2);
    for (i=0;i<strlen(s1);i++) {if (s1[i]==strcmp()) m=m+1 ;}
    b=strlen(s1);
    n=b/m*100;
    printf("%i %",n);
    _getch();
} //////////
что не правильно, подскажите, у меня с типами данных не получается))))

Решение задачи: «Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква»

textual
Листинг программы
#include <stdio.h>
 
#define SIZE 240-32 // ASCII code изменил параметры вставки кодов начиная с пробела и до "я"
unsigned array[SIZE]; // подставляем в массив значение параметра SIZE
 
int main(void)
{
    int c, i, counts;
 
    counts = 0; // количество символов вводимых
    while((c = getc(stdin)) != EOF && c != '\n') // пока получаем с клавиатуры поток данных и нет символа конца файла 
    if(c >= 32 && c <= 240) {  // символы в диапозоне
        ++counts; // увеличить на один кол-во символов 
        ++array[c-32]; // тут не пойму, здесь записывается представление символа в коде ASKII и записывается в массив?
    }
    for(i = 0; i < SIZE; ++i )// запускаем цикл для всех элементов массива
    if( array[i] ) // если элементо массива то
        printf( "symbol '%c' occur %d times, and it makes %.2f%%\n", 
            i + 32, array[i], (double)array[i] / (double)counts * 100.0 ); // вывод представления символа/кол-во повторений/ процент от всех символов в тексте, так?
    putc('\n', stdout ); // вывод на экран
    return 0;
}

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

В этом коде проводится частотный анализ текста, то есть подсчитывается, сколько раз в тексте встречается каждая буква. Список действий:

  1. Установка параметров:
    • #define SIZE 240-32 - параметр SIZE, который определяет размер массива. Значение SIZE вычисляется как разница между максимальным ASCII-кодом (240) и минимальным (32), который является кодом пробела в ASCII.
    • unsigned array[SIZE]; - создание массива типа unsigned с размером SIZE для хранения количества вхождений каждой буквы.
  2. Ввод данных:
    • int c, i, counts; counts = 0; - объявление и инициализация переменных.
    • while((c = getc(stdin)) != EOF && c != '\n') - цикл, который будет выполняться, пока считывается символ из стандартного ввода (клавиатуры), и этот символ не является символом конца файла (EOF) или символом новой строки (\n).
    • if(c >= 32 && c <= 240) - условие, которое проверяет, является ли символ в диапазоне от пробела (32) до максимального ASCII-кода (240).
    • ++counts; - увеличение счетчика количества введенных символов.
    • ++array[c-32]; - увеличение значения в массиве array на 1 для символа, соответствующего ASCII-коду c.
  3. Вывод результатов:
    • for(i = 0; i < SIZE; ++i ) - цикл, который проходит по всем элементам массива.
    • if( array[i] ) - условие, которое проверяет, больше ли значение в массиве нуля, что означает, что символ встречался в тексте.
    • printf(symbol '%c' occur %d times, and it makes %.2f%%\n, i + 32, array[i], (double)array[i] / (double)counts * 100.0 ); - вывод на экран информации о символе, количестве его вхождений и процентном соотношении относительно общего количества символов.
  4. Завершение работы программы:
    • putc('\n', stdout); - вывод символа новой строки на экран.
    • return 0; - завершение работы программы.

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


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

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

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