3

C で文字列の配列を並べ替える必要があります。2D 配列の使用方法は次のとおりです。

まず、配列の各要素の容量が 10 文字であるサイズ 115 の配列を宣言します。 char stock[115][10];

次に、ユーザーがこの配列に入力する必要がある単語を入力するとすぐに、次のように保存します。

strcpy(stock[r],msg);
r++;

ここで、 msgはユーザー入力を格納するために使用される一時変数であり、rは最初に 0 に割り当てられた整数です。

問題は、Stock配列を印刷する必要がある場合です。出力をアルファベット順にする必要があります。qsort を使用してみましたが、動作しませんでした。おそらく、qsort の理解が不足しているため、適切に実装できていませんでした。

予想される出力を印刷できるように、 STOCK配列をソートする方法を提案してください。

また、ストック配列の通常の印刷が正常に機能していることにも注意してください。つまり、配列を格納された順序で印刷しようとすると、正常に機能します。それは私が助けを必要としているソートです。

ありがとう :)

Edit01: ここで使用しようとしている QSORT メソッドは次のとおりです。

//Call Qsort Method
qsort(stock, r, sizeof(stock[0]), comp);



//Function to Compare two Strings - Used in the QSORT Method
int comp(const void *s1, const void *s2)
{
    return (strcmp(*(char **)s1, *(char **)s2));
}
4

1 に答える 1

7

のプロトタイプは次のqsortとおりです。

void qsort(void *base, size_t nmemb, size_t size, 
           int(*compar)(const void *, const void *));
  • baseあなたの配列です(stockここ)。
  • nmemb配列のメンバー数です (rここ)。
  • size要素のサイズです(10ここでは)。

関数は 2 つのcompar文字列を比較し、最初の引数がそれぞれ 2 番目の引数より小さい、等しい、または大きいと見なされる場合、0 より小さい、等しい、または大きい整数を返す必要があります。strcmpあなたのためにそれを行うことができます。

#include <string.h>

int cmp(const void *a, const void *b) { 
    return strcmp(a, b); 
}

qsort(stock, r, 10, cmp);
于 2012-10-24T13:53:47.677 に答える