• ベストアンサー

C言語でcsvファイル入出力に関する質問です。

data.csvオープン、data.csvのデータを読み込んで、a>b>cの優先順位で昇順にソートし、result.csvに書き込み、result.csvクローズです。 手順自体はわかっていますが、なにせC言語の初心者なので、ネットでソースコード見てもちんぷんかんぷんです。ソートも一次配列だけなら自力でできるが、優先順にソートするプログラムはどう書いたらよいでしょうか? ご教授お願いします。 C言語の初心者です、助けてください。 以下が例です:

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ソートプログラムを言葉で表わしたら、多くのものは ・大小比較する→入れ替える が基本になっています。 つまり ・大小比較する ・入れ替える の方法が正しくできれば、どんなデータだろうとソートできるのです。 a,b,cの3つで混乱したようですが、通常の数値も、同じようなことはやっているのです。 125と134の比較は 100の位: 1 = 1 10の位: 2 < 3 1の位: 5 > 4 を、100の位>10の位>1の位 という優先順位で比較したものです。 ただ、通常の数値のように <や>で簡単に比較できないだけです。 常套手段としては、 x < y → x-y < 0 x = y → x-y = 0 x > y → x-y > 0 と「x,yの大小関係」は「x-yと0との比較」と考えて compare(x,y) <0 : x<yのとき compare(x,y) =0 : x=yのとき compare(x,y) >0 : x>yのとき となる比較関数を用意する、というのがあります(#1にあるものはその例です) 入れ替えも、「2つの数値」→「2組のデータ」と考えて、対応する値同士を入れかえます

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

構造体は理解してます? int compare(struct record* x, struct record* y) { if ( x.a > y.a ) return 1; if ( x.a < y.a ) return -1; if ( x.b > y.b ) return 1; if ( x.b < y.b ) return -1; if ( x.c > y.c ) return 1; if ( x.c < y.c ) return -1; return 0; } この↑比較関数を使って struct record data[] をソートすればいい。

すると、全ての回答が全文表示されます。

関連するQ&A