读取文本行,对它们进行排序并将它们写入新的文本文件

时间:2011-08-04 09:27:52

标签: c++ arrays string sorting notepad

我一直在努力编写一个可以解决特定问题的程序,我已经多年没使用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 12490 1023 12 29 10 92 96 100 11
             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]

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

2 个答案:

答案 0 :(得分:0)

  1. 逐行读取文件。你可以使用fgets来实现这个
  2. 将每一行添加到包含字符串和值的列表(ex std:list)中 (sscanf_s(“%d%d%d ...”)从右边获取第二个值)
  3. 使用std:stable_sor
  4. 排序
  5. 将所有内容写入输出文件
  6. 样品

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

    请注意,上面的代码未经过测试

答案 1 :(得分:0)

如果你只想将数据存储在像“array [line_data,line_number]”这样的数组中,你可以这样做:

  1. 使用ifstream
  2. 打开文件
  3. 使用std :: getline读取每一行
  4. 将数据从getline保存到容器中
  5. 所以,如果您使用名为“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);
    }
    

    这样,存储[0]将成为文本文件的第一行。