Составьте гистограмму количества раз, когда появляются разные символы - PullRequest
1 голос
/ 18 августа 2011

Просто ваша стандартная программа для начинающих. Я пытаюсь распечатать гистограмму всех различных символов, которые пользователь вводит в виде строки.

#include <stdio.h>


#define LIMIT 255


main(){
int asciiArray[LIMIT], input, outer, inner;

while((input = getchar()) != EOF){
    asciiArray[input] = ++asciiArray[input];
    //printf("%d\n", asciiArray[input]);
}
for(outer = 0; outer <= LIMIT; outer++){
    if(asciiArray[outer] < 0){
        putchar(outer);
        printf("\t");
        for(inner = asciiArray[outer]; inner > 1; inner--)
            printf("*");
        printf("\n");       
    }
    else
        ;
}

}

Это результаты, когда пользователь вводит "h":

h0
2
9
?
@
C
G
J
K
U
Z
a
b
h
j
l
n
q
}
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�

Ответы [ 3 ]

6 голосов
/ 18 августа 2011

Для начала, вы не инициализируете asciiArray, поэтому он может содержать все.

Попробуйте memset(asciiArray, 0, sizeof(asciiArray)); или int asciiArray[LIMIT] = {0}.

Кроме того, вы можете упростить это приращение вwhile to: asciiArray[input]++.

for тоже выглядит подозрительно (особенно, как он получает доступ asciiArray[255]).Более того, я не понимаю, как asciiArray[outer] может быть меньше 0 Возможно, вы имели в виду >?.

3 голосов
/ 18 августа 2011

LIMIT, вероятно, следует установить равным 256, а затем цикл for должен иметь

for(outer = 0; outer < LIMIT; outer++)

В противном случае вы выходите за пределы массива.

Как уже упоминалось, массив должен быть инициализирован.

Позже в операторе if также проверяется, что значение меньше нуля, а не больше.Оно должно быть:

if(asciiArray[outer] > 0)

, и второе утверждение for отключено на единицу (при условии, что вы пытаетесь отобразить одну звездочку для каждого экземпляра символа).Должно быть:

for(inner = asciiArray[outer]; inner >= 1; inner--)
0 голосов
/ 18 августа 2011

Вы должны инициализировать массив ascii в 0;

i = 0;
while (i < LIMIT)
{
a[i] = 0;
i++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...