Подсчитать количество использований каждого символа во введенной пользователем строке и вывести результаты на экран

У меня вместе с нужными знаками выводится еще и лишний мусор, даже если не вводить строку то всеравно выведется ответ.

#include <stdio.h>
#include <string.h>

int main(void)
{
    int x, k;
    printf("Enter a string: ");
    char str[134];
    char ch;
    fgets(str, sizeof(str), stdin);
    fflush(stdin);
    int a[130]={0};
    for (k=33; k<=126; k++)
    for (x=0; x<sizeof(str); x++)
    if (ch=k ==str[x])
    a[k]++;
    for (k=33; k<=126; k++)
    {
        if (a[k]>0)
        printf("%c - %d\n",ch=k,a[k]);
    }
    return 0;
}

Ответы (1 шт):

Автор решения: Harry

С учетом комментария...

Попробуйте так:

printf("Enter a string: ");
char str[134];
fgets(str, sizeof(str), stdin);
int a[256]={0};
for(char * c = str; *c; c++)
{
    a[(unsigned char)*c]++;
}
for (int k = 0; k < 256; k++)
{
    if (a[k] > 0)
        printf("%c - %d\n",(char)k,a[k]);
}

Можете отсеивать все не-символы, например, начав с k = 33.

→ Ссылка