Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用直方图查找数组中最常见的字母_C - Fatal编程技术网

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

C 使用直方图查找数组中最常见的字母,c,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

这就是我想到的,但我总是得到一个运行时检查失败#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;
}
int-mostCommonLetter(字符s[]{
int i=0,h[26],k=0,max=0,number=0;
而(k<26){
h[k]=“0”;
k++;
}
而(s[i]!='\0'){
h[whichLetter(s[i])]=h[whichLetter(s[i])]+1;
i++;
}
h[26]='\0';
对于(i=0;h[i]!='\0';i++){
如果(h[i]>max)
数字=i;
}
返回号码;
}

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


另外,您是否确定
whichLetter
始终返回0..25范围内的值?如果遇到空格,它会做什么?

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


另外,您是否确定
whichLetter
始终返回0..25范围内的值?如果遇到空格,它会做什么?

这会写入数组的末尾:

h[26] = '\0';
使for循环取决于长度而不是最后一个字符:

for(i=0;i<26;i++){
    if(h[i] > max)
        number=i;
}
for(i=0;i最大值)
数字=i;
}

这会写入超过数组末尾的内容:

h[26] = '\0';
使for循环取决于长度而不是最后一个字符:

for(i=0;i<26;i++){
    if(h[i] > max)
        number=i;
}
for(i=0;i最大值)
数字=i;
}

whichLetter遇到错误时返回-1space@user133466:这也将中断-您需要对此进行检查,如果返回值为-1,请不要修改hwhichLetter在遇到错误时返回-1space@user133466:这也将中断-您需要对此进行检查,如果返回值为-1,则不要修改h