读取文本文件,存储它,并按升序对此数据进行排序

时间:2013-05-29 23:43:25

标签: c++ file sorting

正如你从标题中可以理解的那样,我在这个编程环境中真的很新手。 我想请你帮忙:我需要阅读如下文件:

11:02,11:06
15:45,16:05
...

这些数据高于另一个。所以我们有11列(11个字符加上换行符)和239行。 在原始文件中,它们都是随机排序的。我应该按升序排序。 最后,当然可以想象输出。 到目前为止,我已经完成了第一步,我正在读取文件“char by char”。但我无法继续前进;我的知识不允许我这样做。如果有人可以帮助我,我会很高兴。我真的需要这些东西。

1 个答案:

答案 0 :(得分:0)

这是Perl中的数据生成器脚本;它在每一行产生2次,第二次总是晚于第一次:

#!/usr/bin/env perl
use strict;
use warnings;

foreach my $i (1..239)
{
    my $h1 = 10 + rand 8;
    my $h2 = $h1 + 1;
    my $m1 = rand 60;
    my $m2 = rand 60;
    printf "%.2d:%.2d,%.2d:%.2d\n", $h1, $m1, $h2, $m2;
}

这是一个适度冗长的C ++程序,它以与Unix sort程序相同的方式对Perl生成的数据文件进行排序。

#include <string>
#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<std::string> input;
    std::string line;

    while (std::getline(std::cin, line))
        input.push_back(line);

    std::sort(input.begin(), input.end());

    //C++03
    //for (std::vector<std::string>::iterator it = input.begin(); it != input.end(); ++it)
    //    std::cout << *it << std::endl;

    //C++11
    for (auto &it : input)
        std::cout << it << std::endl;
}

可能有压缩C ++的方法,但它适用于我(Mac OS X 10.8.3上的G ++ 4.7.1):

    g++ -O3 -g -std=c++11 -Wall -Wextra rs.cpp -o rs

有一些压缩Perl代码的方法。