Провести частотный анализ текста, т.е. указать (в процентах), сколько раз встречается та или иная буква - 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;
}
Объяснение кода листинга программы
В этом коде проводится частотный анализ текста, то есть подсчитывается, сколько раз в тексте встречается каждая буква. Список действий:
- Установка параметров:
#define SIZE 240-32- параметр SIZE, который определяет размер массива. Значение SIZE вычисляется как разница между максимальным ASCII-кодом (240) и минимальным (32), который является кодом пробела в ASCII.unsigned array[SIZE];- создание массива типаunsignedс размером SIZE для хранения количества вхождений каждой буквы.
- Ввод данных:
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.
- Вывод результатов:
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;- завершение работы программы.