1

10X15の文字配列を並べ替えようとしています。ここで、各行は単語です。私の目標は、配列[行0] [列0から14]の位置で、一番上の最大値の単語から、一番下の配列[行9][列0]の位置で、降順で並べ替えることです。 14まで]。各行は単語です(ええ、それらは単語のようには見えませんが、プログラムのソート機能をテストするためのものです)。

明確にするために: 私がする必要があるのはこれです...各行が単語全体であることを考えると、最も高い値の単語が上にあり、最も低い値の単語が下にある順に行を並べ替える必要があります。

編集:

すべてが機能するようになりました。同様の質問がある場合は、以下のコメントを参照してください。いくつかの素晴らしい解決策があります。ソートについて詳しく知るために、独自のソート関数を作成するソリューションを使用しました。そして、私を助けてくれた皆さんに感謝します!:)

4

3 に答える 3

2

C ++を使用しているので、配列の使用をやめ、stlタイプから始めます。

各行を文字列に変換します。

string tempString
for (int i = 0; i < rowSize; ++i) {
    tempString.pushBack(array[foreachrow][i])
}

それらをベクトルに追加します

std::vector<std::string> sorter;
sorter.push_back(tempString);

行ごとにそれを行います。

std::vector<std::string> sorter;
for each row {
    for each coloumn {
        the string thing

    }
    push back the string
}

次に、を使用してベクトルを並べ替え、そのベクトルをstd::sort配列に書き戻します(配列が吸うために必要であるが、そうしない場合)

于 2013-02-08T01:01:43.490 に答える
2

stringandを使用した新しいコードの問題vectorは、単純なタイプミスです。

sorter[count] = array[count+1];する必要がありますsorter[count] = sorter[count+1];

于 2013-02-08T03:19:00.330 に答える
2

いつものように、以下が必要ですqsort:

void qsort( const void *ptr, size_t count, size_t size,
            int (*comp)(const void *, const void *) );

これには、開始アドレスへの void ポインター、並べ替える要素の数、各要素のサイズ、および比較関数が必要です。

次のように呼び出します。

qsort( array, ROWS, COLS, compare_word );

逆にソートするためにcompare_wordを定義する場所:

int compare_word( const void* a, const void* b )
{
    return strncmp( b, a, COLS );
}

ここで、各単語の長さが 15 文字であることを考えると、対処すべきパディングが存在する可能性があります。(&array[1][0] - &array[0][0])配列が 10 x 16 ではなく 10 x 15 としてパックされるという絶対的な知識はありませんCOLS

使用が許可されておらずqsort、代わりに独自のソートアルゴリズムを作成する必要がある場合は、選択ソートなどの簡単なことを行ってください。strncmp文字列のテストに使用できます。関数を検索します (Google で簡単に検索できます。Linux を使用している場合はman 3 strncmp)。char文字を交換するには、長さの一時的な配列を使用してCOLSから、 を 3 回呼び出してmemcpy単語を交換します。

于 2013-02-08T02:01:59.600 に答える