Использование гистограммы для поиска наиболее распространенной буквы в массиве - PullRequest
0 голосов
/ 12 апреля 2011

Это то, что я придумал, но я всегда получаю ошибку проверки времени выполнения # 2 - стек вокруг переменной 'h' поврежден.

int mostCommonLetter(char s[]) {
    int i=0, h[26],k=0, max=0, number=0;
    while ( k < 26){
        h[k] = '0';
        k++;
    }
    while(s[i] != '\0'){
        h[whichLetter(s[i])] = h[whichLetter(s[i])]+1;
        i++;
    }
    h[26] = '\0';
    for(i=0;h[i]!='\0';i++){
        if(h[i] > max)
            number=i;
    }
    return number;
}

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

Вы не можете сделать h[26] = '\0'; - h имеет 26 проиндексированных элементов 0..25.Поскольку вы знаете длину h, вам не нужно ее завершать 0, просто выполните for (i=0; i < 26; ++i)

Кроме того, вы уверены, что whichLetter всегда возвращает значение в диапазоне 0..25?Что он делает, если, например, встречает пробел?

1 голос
/ 12 апреля 2011

Это записывает после конца массива:

h[26] = '\0';

Заставьте цикл for зависеть от длины, а не от последнего символа:

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