2016-10-29 13 views
-4

単語[]の配列内で単語が繰り返される回数を数えようとしています。私はすでにi、j、num_wordsを持っていて、単語配列は初期化されています。単語配列は、char * words [n]型です。 frequency []配列はwords []配列と平行に走り、各単語が現れる回数を記録します。プログラムはコンパイルされますが、実行するとセグメント化エラーが発生します。問題は、コードの次のセクションから来ている:文字列の配列を持つc 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]++; 
        } 
      } 
    } 

私はしばらくの間、これで遊んでてきたが、私はこのコードのビットと間違っている何見当がつかない。

+1

NUM_WORDSは何の値ですがありますか? –

+5

'int frequency [1000]'、 'i

+3

少なくともassertを追加する(num_words <1000) –

答えて

1

あなたは次のようにijの両方にfreqをインクリメントする必要があります。

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を初期化しています。したがって、各文字は少なくとも0回発生し、意味をなさない。それはfreqまたはfrequencyあなたはおそらく1

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

に初期化したいですか?あなたは、あなたのコード内の2つの異なる変数

テスト

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; 
} 

結果

関連する問題