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