2016-05-01 4 views
-2

私は自分の関数でそれをやりたいのです(私はqsortがおそらく良い選択肢であることを知っています)。 は、ここで私がやったものだ:argvの値を関数strcmpでソートする

それは配列では何も変わりません
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void order(int count, char** strings); 

int main(int argc, char** argv) 
{ 
    int i = 0; 
    for (i = 1; i < argc; i++) 
    { 
     printf("%s, ", argv[i]); 
    } 
    printf("\nAfter: \n"); 
    order(argc, argv); 
    for (i = 1; i < argc; i++) 
    { 
     printf("%s, ", argv[i]); 
    } 

    getchar(); 
    return 0; 
} 

void order(int count, char** strings) 
{ 
    char temp[50] = { 0 }; 
    int x = 0, y = 0; 
    for (x = 1; x < count - 1; x++) 
    { 
     for (y = 0; y < count - x - 1; y++) 
     { 
      if (strcmp(strings[y], strings[y + 1]) > 1) 
      { 
       strcpy(temp, strings[y]); 
       strcpy(strings[y], strings[y+1]); 
       strcpy(strings[y+1], temp); 
      } 
     } 

    } 
} 

、私は、感謝を助け、あらゆる種類のをいただければ幸いです!

+0

strcmpはどのようにソートするのに役立ちますか?、すべての入力は異なる長さですか? – piyushj

+0

@piyushjaiswal:異なる長さの文字列を持つ 'strcmp'の動作はよく定義され、一貫性があり、通常は「正しい」とみなされます。 – usr2564301

+0

これまでにこれを試してデバッグするために何をしましたか?例えば最も内側のループでスワップされたもののリストを出力します。 –

答えて

1

strcmpの結果が間違っています。そのmanページによれば、

整数に等しい、より大きい、またはより小さい戻り、文字列はS1によって指されている場合は、に等しい、より大きい、または文字列を指さ未満それぞれs2。

ので、このラインが間違っている:

if (strcmp(strings[y], strings[y + 1]) > 1) 

はそれを動作させるために0と比較します。

+0

ありがとうございました! strcmpの仕組みが忘れられたとは信じられません。 –