2016-10-29 3 views
-4

단어 [] 배열에서 단어가 반복되는 횟수를 계산하려고합니다. 나는 이미 i, j, num_words와 단어 배열을 초기화했다. 단어 배열은 char * words [n] 유형입니다. frequency [] 배열은 words [] 배열과 평행하게 실행되며 각 단어가 나타나는 횟수를 추적합니다. 프로그램이 컴파일되지만 실행될 때 세그먼트 오류가 발생합니다. 나는 잠시 동안이 주변에 놀았 던문자열 배열이있는 strcmp()

int frequency[1000] = {0}; 
    for(i = 0; i < num_words; i++){ 
      for(j = i+1; j < num_words; j++){ 
        if(strcmp(words[i], words[j]) == 0){ 
          freq[i]++; 
        } 
      } 
    } 

하지만 난 코드의이 비트에 어떤 문제가 있는지 아무 생각이 : 문제는 코드의 다음 섹션에서오고있다.

for (i = 0; i < num_words; i++) 
    for (j = i + 1; j < num_words; j++) 
     if (strcmp(words[i], words[j]) == 0) 
     { 
      freq[i]++; 
      freq[j]++; 
     } 

을 또한, 당신이 제로에 freq을 초기화하는 다음과 같이

+1

NUM_WORDS은 무엇 값이? –

+5

'int frequency [1000]','i

+3

적어도 assert를 추가하십시오 (num_words <1000) –

답변

1

당신은 모두 i에 대한 freq을 증가해야하고 j. 따라서 각 문자는 적어도 0 번 발생하므로 의미가 없습니다. 그것은 freq 또는 frequency 당신은 아마 1

for (i = 0; i < num_words; i++) 
    freq[i] = 1; 

로 초기화 할 수 있습니까? 당신은 당신의 코드에서 두 개의 서로 다른 변수

테스트

int main() 
{ 
    char *words[] = { "1", "2", "3", "1", "1", "4"}; 
    int i, j; 
    const int num_words = 6; 
    int freq[num_words] = { 0 }; 

    for (i = 0; i < num_words; i++) 
     freq[i] = 1; 

    for (i = 0; i < num_words; i++) 
     for (j = i + 1; j < num_words; j++) 
      if (strcmp(words[i], words[j]) == 0) 
      { 
       freq[i]++; 
       freq[j]++; 
      } 

    for (i = 0; i < num_words; i++) 
     printf("%d ", freq[i]); 
    return 0; 
} 

결과

3 1 1 3 3 1