2011-04-11 78 views
0

這就是我想出的,但我總是得到運行時檢查失敗#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; 
} 

回答

3

你不能做h[26] = '\0'; -h有26個索引爲0..25的元素。正如你知道h的長度,你不需要0終止它,只需做for (i=0; i < 26; ++i)

另外,你確定whichLetter總是返回0..25範圍內的值嗎?它如何做,例如遇到空間?

+0

whichLetter返回-1,當它遇到一個空間 – user133466 2011-04-11 23:41:23

+0

@ user133466:這也會中斷 - 你需要檢查這個,如果返回值是-1,不要修改h – Erik 2011-04-12 00:34:19

1

這寫過去的數組的末尾:

h[26] = '\0'; 

讓for循環依賴於長度,而不是最後一個字符:

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