Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将文本文件中的200行按每行上相同位置出现的4个数字排序_C++_Sorting_Stream_Xcode5 - Fatal编程技术网

C++ 将文本文件中的200行按每行上相同位置出现的4个数字排序

C++ 将文本文件中的200行按每行上相同位置出现的4个数字排序,c++,sorting,stream,xcode5,C++,Sorting,Stream,Xcode5,我试图阅读一个有200行的文本文件,看起来像以下四个示例: 1 4:48:08 Orvar Steingrimsson 1979 30 - 39 ara IS200 2 4:52:25 Gudni Pall Palsson 1987 18 - 29 ara IS870 3 5:14:24 Ryan Paavola 1984

我试图阅读一个有200行的文本文件,看起来像以下四个示例:

1    4:48:08   Orvar Steingrimsson                 1979   30 - 39 ara      IS200 
2    4:52:25   Gudni Pall Palsson                  1987   18 - 29 ara      IS870 
3    5:14:24   Ryan Paavola                        1984   18 - 29 ara      USA
4    5:18:43   Hendrik Sporing                     1990   18 - 29 ara      GER
目前,正如你所看到的,台词是按时间排列的,但我希望按每位参赛者的生日排列,因此,在本例中,这四条台词如下所示:

4    5:18:43   Hendrik Sporing                     1990   18 - 29 ara      GER
2    4:52:25   Gudni Pall Palsson                  1987   18 - 29 ara      IS870 
3    5:14:24   Ryan Paavola                        1984   18 - 29 ara      USA
1    4:48:08   Orvar Steingrimsson                 1979   30 - 39 ara      IS200 
我应该根据生日重新排列这些行,输入文件是“laugavegurinn.txt”,输出文件是“laugavegurinn2.txt”

有人能指出我的代码的问题和/或提出更好的方法吗?抬起头来,不太熟练的C++,并将感谢任何帮助。这是我的代码:

#include <iostream> //for basic functions
#include <fstream> //for basic file operations
#include <string> //for string operations
#include <map> //for multimap functions

using namespace std;

void process (istream &in, ostream &out) {
multimap<int, string> data_by_year;
string str;
while (getline(in,str)) {
    int year = stoi(str.substr(54, 4));
    data_by_year.insert(make_pair(year, str));
}
for (auto v : data_by_year) {
    out << v.second << "\n";
}
}

int main () {
    ifstream in;
    ofstream out;
    in.open("laugavegurinn.txt");
    out.open("laugavegurinn2.txt");

    process(in, out);
}
#包含//基本功能
#包含//用于基本文件操作
#包含//用于字符串操作
#包含//用于多重映射函数
使用名称空间std;
空洞过程(istream&in、ostream&out){
多地图数据(按年计算);
字符串str;
while(getline(in,str)){
int year=stoi(str.substr(54,4));
按年份插入数据(组成一对(年份,str));
}
用于(自动v:按年份的数据){

out这一切正常吗?你只是在寻求改进

通常的方法是将所有未排序的行添加到
std::vector
,然后使用自定义排序调用
std::sort
,以排序到所需的顺序,然后打印出来


应该比您的解决方案(无论如何都很好)更有效。

作为使用
str.substr(54,4)
的替代方法,您可以使用以下方法(如果格式发生变化,则使用字符位置容易出错):

#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
string myString=“三个单独的令牌”;
istringstream iss(myString);
自动it=istream_迭代器(iss);
字符串thirdToken=*(it+++);

cout substr(54,4)的原因因为在文本文件中,生日总是每行的第54-58个字符。到底什么对你不起作用?你问?@P0W可能不是同一个人,只是同一课程的某个人……最近这越来越频繁了,你总能知道什么时候离某所大学的课程作业截止日期还有5个小时……是的,最近在那里是不是也出现了一连串的括号匹配问题
#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
using namespace std;

int main() {

    string myString = "Three    separate    tokens";

    istringstream iss(myString);
    auto it = istream_iterator<string>(iss);
    string thirdToken = *(it ++ ++);

    cout << thirdToken;
}