2016-10-29 6 views
-4

Ich versuche zu zählen, wie oft jedes Wort im Array words [] wiederholt wird. Ich habe bereits i, j, num_words und das Worts-Array initialisiert. Das Worts Array hat den Typ char * words [n]. Das Array frequency [] läuft parallel zum Array words [] und verfolgt die Häufigkeit, mit der jedes Wort erscheint. Das Programm kompiliert, aber wenn es läuft, bekomme ich einen Segmentierungsfehler. Das Problem kommt aus dem folgenden Codeabschnitt:c strcmp() mit einem Array von Strings

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

Ich habe schon eine Weile mit diesem herumspielen, aber ich habe keine Ahnung, was mit diesem Stück Code falsch ist.

+1

Welchen Wert ist NUM_WORDS? –

+5

Was ist eine Verbindung zwischen 'int frequency [1000]', 'i

+3

Mindestens add assert (num_words <1000) –

Antwort

1

Sie haben die freq für beide i und j zu erhöhen, wie folgt:

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

Darüber hinaus werden Sie freq auf Null initialisiert. So kommt jeder Buchstabe mindestens null mal vor, was keinen Sinn ergibt. Sie wollen wahrscheinlich zu 1.

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

Ist es freq oder frequency initialisieren? Sie haben zwei verschiedene Variablen im Code

Testing

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

Ergebnis