C 使用直方图查找数组中最常见的字母
这就是我想到的,但我总是得到一个运行时检查失败#2-变量“h”周围的堆栈已损坏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
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