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++ 按降序排列包含球员姓名和分数的文本文件_C++_Sorting_Text Files - Fatal编程技术网

C++ 按降序排列包含球员姓名和分数的文本文件

C++ 按降序排列包含球员姓名和分数的文本文件,c++,sorting,text-files,C++,Sorting,Text Files,我试图打开一个文本文件,然后按降序重新排列,以显示谁的分数最高。在文本文件中有球员的名字和他们的分数 我已经成功地用C++打印了文本文件,但是我不能找到一种方法来排序它,因为变量在文本文件中。p> #include <string> #include <cstdio> #include <fstream> #include <algorithm> #include <iostream> #include <iterator>

我试图打开一个文本文件,然后按降序重新排列,以显示谁的分数最高。在文本文件中有球员的名字和他们的分数

<>我已经成功地用C++打印了文本文件,但是我不能找到一种方法来排序它,因为变量在文本文件中。p>
#include <string>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>

using namespace std;

struct player {
    string name;
    int score;
    int position;
};

int main()
{
    string line;
    ifstream inFile;
    inFile.open("C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) {
        while (getline(inFile, line)) {
            player x;
            ifstream inFile;
            inFile.open("C:/Users/kkpet/Desktop/highscore.txt");
            cout << line << '\n';
        }
        inFile.close();
    }
    else
        cout << "Unable to open text";
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构播放器{
字符串名;
智力得分;
内部位置;
};
int main()
{
弦线;
河流充填;
infle.open(“C:/Users/kkpet/Desktop/highscore.txt”);
if(infle.is_open()){
while(getline(infle,line)){
玩家x;
河流充填;
infle.open(“C:/Users/kkpet/Desktop/highscore.txt”);

cout假设您的文本文件如下所示:

Name1 1
Name2 1
Name4 5
Name3 6
#include <string>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>


int main()
{
    std::string line;
    std::ifstream inFile;
    inFile.open("/C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) {
        std::vector<std::pair<int, std::string> > score_vector;
        std::string name;
        int score;
        while (inFile >> name >> score) {
            score_vector.push_back(std::make_pair(score, name));
            std::cout << line << '\n';
        }
        inFile.close();
        std::sort(score_vector.begin(), score_vector.end());
        std::reverse(score_vector.begin(), score_vector.end());
        for(auto it = score_vector.begin(); it != score_vector.end(); ++it){
            std::cout << "Name: " << it->second << " Score: " << it->first << std::endl;
        }
    }
    else
        std::cout << "Unable to open text";
}
你可以这样做:

Name1 1
Name2 1
Name4 5
Name3 6
#include <string>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <iostream>
#include <iterator>
#include <functional>
#include <vector>


int main()
{
    std::string line;
    std::ifstream inFile;
    inFile.open("/C:/Users/kkpet/Desktop/highscore.txt");
    if (inFile.is_open()) {
        std::vector<std::pair<int, std::string> > score_vector;
        std::string name;
        int score;
        while (inFile >> name >> score) {
            score_vector.push_back(std::make_pair(score, name));
            std::cout << line << '\n';
        }
        inFile.close();
        std::sort(score_vector.begin(), score_vector.end());
        std::reverse(score_vector.begin(), score_vector.end());
        for(auto it = score_vector.begin(); it != score_vector.end(); ++it){
            std::cout << "Name: " << it->second << " Score: " << it->first << std::endl;
        }
    }
    else
        std::cout << "Unable to open text";
}
输出:

Place: 1 Name: Name3 Score: 6
Place: 2 Name: Name4 Score: 5
Place: 3 Name: Name2 Score: 1
Place: 4 Name: Name1 Score: 1
链接:
[1] :
[2] :
配对信息:

有关迭代器的信息(请参见自动关键字):

不需要使用C++来解决这个问题!只需在shell提示符中输入这个。< /P>
sort -rk 2 highscore.txt > sorted_scores.txt
说明:
“排序”通常按第一个字母对文件进行排序。
-k2选项表示按第二列排序。

-r选项意味着反转(因此最高分数在顶部)。

将任务分成更小的步骤(函数):1.从流中读取所有玩家(使用
std::vector
)2.打开文件3.将结果打印到流4.排序5.main.这将使您更容易完成每个任务。您也可以使用反向迭代器迭代排序向量。非常感谢,我正在尝试理解代码,还有其他方法吗?我以前从未使用过auto,所以我花时间逐行阅读每一行一请参阅编辑以了解更多信息。请接受答案,如果它解决了您的问题,这里的许多第一次者都会忘记它;)非常感谢,我们会慢慢理解,为什么不使用简单的冒泡排序?这是我试图排序的文本文件