0

私は特定の問題を解決するプログラムを書くのに苦労してきました.C++を何年も使用していないため、プログラムを時間内に完了するのが難しくなっています. 次のようなテキストデータがあります。

10929 12490 1023 12 29 10 92 96 100 10
10929 12290 1023 10 29 10 95 90 90 10
10929 12190 1023 12 29 10 93 91 80 12
10929 12590 1023 10 29 10 97 90 70 10
10929
10929 12290 1023 10 29 10 95 90 90 10
10929 12190 1023 12 29 10 93 91 80 10
10929 12590 1023 10 29 10 97 90 70 10

90 年代、80 年代、70 年代と同じように、新しいファイルにすべての 100 年代が含まれるようにデータを並べ替える必要があります (右から 2 番目の列に注意してください)。

これまでの私の主な問題は、各行を文字列の配列に保存して並べ替えを容易にすることです。私が念頭に置いていた形式は次のとおりです。

この問題に関するヘルプをいただければ幸いです。お時間をいただきありがとうございます

4

2 に答える 2

0
  1. ファイルを 1 行ずつ読み取ります。これにはfgetsを使用できます
  2. 文字列と値を含むリスト (例: std:list) にすべての行を追加します (右から 2 番目の値を取得するには sscanf_s("%d %d %d ..."))
  3. std:stable_sor を使用したソート
  4. すべてを出力ファイルに書き込む

サンプル

struct tagITEM {char*   szLine;  int    iSort;}ITEM, *pITEM;

std::list<ITEM> lItems;

inline bool lt_ItemCmp(ITEM& c1, ITEM& c2) { return c1.iLine < c2.iLine; }

std::stable_sort(lItems.begin(), lItems.end(), lt_ItemCmp);

上記のコードはテストされていないことに注意してください

于 2011-08-04T09:38:58.673 に答える
0

"array[line_data, line_number]" のような配列にデータを格納したい場合は、次のようにします。

  1. ifstream を使用してファイルを開く
  2. std::getline を使用して各行を読み取ります
  3. getline からコンテナにデータを保存する

そのため、"file" という名前の std::ifstream と storage という名前のコンテナーを使用すると、読み取りは次のようになります。

std::string str;
std::list<std::string> storage; 
//or std::vector<std::string>, depends on how much you have to read in

while(std::getline(file,str))
{
     storage.push_back(str);
}

これにより、in storage[0] がテキストファイルの最初の行になります。

于 2011-08-04T10:03:19.490 に答える