2016-05-06 22 views
-2

辞書順に入力した単語のランク付けを試みます。しかし、それはエラーを与える。私はこの機能を使っている間に何か間違ったことをすると思います。何が間違っているのか教えていただけますか?Cでの単語の辞書順の並べ替え

void rank(char word[][100], int size) 
{ 
    int i,j; 
    char temp[100]; 
    for(i=0;i<size;i++) 
    for(j=0;j<size;j++) 
    { 
     if(strcmp(word[j],word[j+1])>0) 
     { 
      strcpy(temp,word[j]); 
      strcpy(word[j],word[j+1]); 
      strcpy(word[j+1],temp); 
     } 
    } 

    printf("First word: %s\nLast word: %s",word[0],word[size-1]); 
} 

int main() 
{ 
    char word[100][200]; 
    int i=0; 

    while(strlen(word[i-1])!=4) 
    { 
     printf("enter word: "); 
     scanf("%s",word[i]); 
     i++; 
    } 

    rank(word,i); 
} 
+0

'j'は'サイズ-1 'と等しい場合、あなたが比較し、 '単語でスワッピングさi' –

+2

'と 'J + 1'を置き換える[J + 1 ] '' word [size] 'で' word'配列の終わりを超えています。したがって、 'j user3386109

+0

それは動作しません!あなたは私たちに** **何が間違っているのかを教えてくれる。 [質問] – Olaf

答えて

0

警告と間違いがあります。

$ gcc main.c 
main.c: In function ‘main’: 
main.c:35:10: warning: passing argument 1 of ‘rank’ from incompatible pointer type [-Wincompatible-pointer-types] 
    rank(word,i); 
     ^
main.c:5:6: note: expected ‘char (*)[100]’ but argument is of type ‘char (*)[200]’ 
void rank(char word[][100], int size) 

一部の配列は範囲外です:while(strlen(word[i-1])!=4)実際のコード例は、コードに似ています。を使用してsegfaultを回避し、境界を越えないようにループカウンタを調整しました。

void rank(char word[][200], int size){ 
    char temp[100]; 
    for (int i = 0; i < size - 1; ++i) { 
     for (int j = i + 1; j < size; ++j) { 
      if (strcmp(word[i], word[j]) > 0) { 
       strcpy(temp, word[i]); 
       strcpy(word[i], word[j]); 
       strcpy(word[j], temp); 
      } 
     } 
    } 
    printf("First word: %s\nLast word: %s\n", word[0], word[size - 1]); 
} 

int main() { 
    char word[100][200]; 
    int i = 0; 
    do { 
     printf("enter word: "); 
     scanf("%s", word[i]); 
     i++; 

    } while (strlen(word[i - 1]) != 4); 
    rank(word,i); 
    return (0); 
} 

テスト

$ ./a.out 
enter word: Superman 
enter word: Batman 
enter word: Wolverine 
enter word: Cyclops 
enter word: Thor 
First word: Batman 
Last word: Wolverine 
+0

ありがとうございました – naber2

関連する問題