使用直方图查找数组中最常见的字母

时间:2011-04-11 23:07:35

标签: c

这就是我想出来的,但我总是得到运行时检查失败#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 个答案:

答案 0 :(得分:3)

你做不到h[26] = '\0'; - h有26个元素索引0..25。如您所知,h的长度不需要0终止,只需执行for (i=0; i < 26; ++i)

即可

另外,您确定whichLetter总是返回0..25范围内的值吗?它是做什么的,例如遇到空间?

答案 1 :(得分:1)

这写过数组的末尾:

h[26] = '\0';

使for循环取决于长度而不是最后一个字符:

for(i=0;i<26;i++){
    if(h[i] > max)
        number=i;
}