2011-04-11 1 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 범위의 값을 반환합니까? 예를 들어 무엇입니까? 공간을 만날 수 있습니까?

h[26] = '\0'; 

루프에 대한 오히려 마지막 문자보다 길이에 따라 확인 :

+0

반환 whichLetter -1은 공간을 발견 한 경우 – user133466

+0

@ user133466 : 그 또한 휴식거야 - 당신은 이것을 확인하고 반환 값이 -1 인 경우 h 수정하지 마십시오 – Erik

1

이 배열의 끝을지나 기록

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