0

我一直在努力编写一个可以为我解决特定问题的程序,多年来我没有使用过 C++,这让我很难及时完成该程序。我有如下文本数据:

10929 12490 1023 12 29 10 92 96 100 10
10929 12290 1023 10 29 10 29 10 95 90 90 90 90 10
10929 12190 1023 12 29 10 93 91 80 12
10929 12590 12590 10290 1029 10 29 10 29 10 29 10 29 10 97 90 90 90 70 10
10929292929292929292929292929292929292929292929292929292929292929292929292929292929292929292929不是
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

我需要对数据进行排序,以便新文件将所有 100 个放在一起并随之而来,对于 90 个、80 个和 70 个(请注意右边的第二列)。

到目前为止,我的主要问题是将每一行保存到一个字符串数组中以使它们易于排序,我想到的形式是:array [line_data,line_number]

任何有关此问题的帮助将不胜感激,谢谢您的时间

4

2 回答 2

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);
}

有了这个,在 storage[0] 将是你的文本文件的第一行。

于 2011-08-04T10:03:19.490 回答
0
  1. 逐行读取文件。你可以为此使用 fgets
  2. 将每一行添加到包含字符串和值 (sscanf_s("%d %d %d ...") 以从右侧获取第二个值) 的列表 (ex std:list)
  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 回答