Определить, сколько раз каждый символ встречается в строке - C (СИ)
Формулировка задачи:
Здравствуйте. Стоит задача определить, сколько раз каждый символ встречается в строке. В общем-то, решение сделал, однако довольно необычно, потому что и символ '0' вполне может встречаться в строке, а я беру и не считаю его. Может, сможете подсказать какое-нибудь более вменяемое решение этой задачи?
#define mflag '0'
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char s[255] = { 0 };
int num = 0;
printf("Введите строку: ");
gets(s);
for (int i = 0; i < strlen(s); i++)
{
for (int j = i; j < strlen(s); j++) if (s[i] == s[j]) num++;
for (int k = i +1; k < strlen(s); k++) if (s[k] == s[i]) s[k] = mflag;
if (s[i]!=mflag) printf("Символ %c встречается %d раз\n", s[i], num);
num = 0;
}
getch();
return 0;
}Решение задачи: «Определить, сколько раз каждый символ встречается в строке»
textual
Листинг программы
#include <stdio.h>
#include <Windows.h>
#define MAX_LEN 10000
int main()
{
int s[256] = { 0 };
char str[MAX_LEN+1];
char c;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите строку: ");
fgets(str, MAX_LEN, stdin);
while (c = *str++) {
++s[c+128];
}
for (c = -128; c <= 127; ++c) {
if (s[c+128]) {
printf("Символ %c встречается %d раз\n", c, s[c+128]);
}
}
}
Объяснение кода листинга программы
В этом коде:
- Объявлены две переменные:
sтипаintиstrтипаchar. - Переменная
sинициализируется как массив из 256 элементов со значением 0. - Переменная
strиспользуется для хранения введенной пользователем строки. - Код считывает строку от пользователя с помощью функции
fgets(). - Затем код проходит по каждому символу в строке и увеличивает соответствующий элемент в массиве
sна 1. - После этого код проходит по всем символам от -128 до 127 (предполагая, что это все символы в кодировке CP-1251) и проверяет, сколько раз каждый символ встречается в массиве
s. Если символ встречается, то выводит количество его вхождений.