Вычислить частоту встречающихся символов в строке - C (СИ)

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

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

Вычислить частоту встречающихся символов в строке.

При этом исходная строка задается как аргумент командной строки.

Решение задачи: «Вычислить частоту встречающихся символов в строке»

textual
Листинг программы
#include <stdio.h>
#define NUMLET 26
#define  SML(i) ((i)-97)
 
int main(int argc, char **argv)
{
    char str[20]="dd fh jkkk aa";
    struct chsslvr
    {
        char a;
        int c;
    }CHSSLVR;
    struct chsslvr ch[NUMLET];
    int i;
    for(i=0; i<NUMLET; ++i)
    {
        ch[i].a = i+97;
        ch[i].c = 0;
    }
    for(i=0; str[i]; ++i)
    {
        ch[SML(str[i])].c++;
    }
    
    for(i=0; i<NUMLET; ++i)
    {
        if(ch[i].c!=0)printf("%c - %d\n", ch[i].a, ch[i].c);
    }
    return 0;
}

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

В этом коде:

  1. Объявлены переменные: — str — массив символов для анализа (строка dd fh jkkk aa); — CHSSLVR — структура для хранения символа и его частоты; — ch — массив структур CHSSLVR для хранения частоты символов; — i — счётчик для циклов;
  2. В первом цикле заполняются структуры ch. Значение переменной a устанавливается равным i+97 (так как в ASCII таблице символы 'a' — 'z' имеют значения от 97 до 122), а значение переменной c — равным 0.
  3. Во втором цикле проходит по всем символам строки str (за исключением нулевых символов). Для каждого символа вычисляется его индекс в массиве ch (с учётом того, что в ASCII таблице символы 'a' — 'z' имеют значения от 97 до 122), и увеличивается значение переменной c в соответствующей структуре ch.
  4. В третьем цикле выводятся на экран все символы из массива ch, для которых значение переменной c не равно 0.
  5. Код завершается возвратом 0, что означает успешное выполнение программы.

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

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