C++ 如何将文件读入数组,然后对数据进行排序?

C++ 如何将文件读入数组,然后对数据进行排序?,c++,arrays,sorting,C++,Arrays,Sorting,到目前为止,我已经找到了几种将文本文件读入数组的方法,并且能够成功地将其显示在屏幕上。 我的问题是如何从那里排序数组。对文本文件进行排序非常简单,但当我尝试将两者结合起来时,我无法使其工作。 到目前为止,我得到的是: int main() { string players[30]; ifstream inData("chessplayers.txt"); if (inData.is_open()) { for (int i = 0; i < 30; i++

到目前为止,我已经找到了几种将文本文件读入数组的方法,并且能够成功地将其显示在屏幕上。 我的问题是如何从那里排序数组。对文本文件进行排序非常简单,但当我尝试将两者结合起来时,我无法使其工作。 到目前为止,我得到的是:

int main()
{
   string players[30];
   ifstream inData("chessplayers.txt");
   if (inData.is_open())
   {
     for (int i = 0; i < 30; i++)
     {
       sort( players, players+i);       
       if (getline(inData, players[i]))
       {        
         cout << players[i] << endl;
       }
       else
       {
         break;
       }
    }
    inData.close();
  }
  else
  {
    cerr << "Failed to open file.\n";
  }
  system("pause");    
  return 0;
}
intmain()
{
弦乐演奏者[30];
ifstream inData(“chessplayers.txt”);
if(inData.is_open())
{
对于(int i=0;i<30;i++)
{
排序(玩家,玩家+i);
if(getline(inData,players[i]))
{        

无法读取数据时不进行排序。将排序功能置于读取之外:

排序(玩家,玩家+30)


如果您想知道重载,请不要使用std::string提供它自己的重载,=,等等。

将不同的操作分离到函数中是一个好主意。这会使代码更干净、更易于阅读、更模块化

例如,在这个问题中,有三件截然不同的事情在进行:将数据读入文件,对其进行排序,然后打印。编写自己的函数来读取并打印数据。您知道已经有一个函数要排序,所以请使用它

下面是一个示例(使用一点C++11),它使用的技术可能是“不允许”使用的,但它为您提供了一个很好的起点,让您了解需要在自己的代码中修改的内容

请注意,代码主要是自文档化的:它表示从文件中读取播放器,对它们进行排序,然后打印它们

#include <algorithm>
#include <deque>
#include <fstream>
#include <iostream>
#include <string>

typedef std::deque<std::string> PlayerContainer;

PlayerContainer getPlayersFromFile(std::string filename)
{
  PlayerContainer players;

  std::ifstream ifs(filename.c_str());

  std::string player;
  while (getline(ifs, player))
    players.push_back(player);

  return players;
}

void printPlayers(PlayerContainer const& players)
{
  // (this is the only part that depends on C++11)
  // for each player in players
  for (auto const& player : players)
    std::cout << player << '\n';
}

int main()
{

  std::string filename("chessplayers.txt");

  PlayerContainer players = getPlayersFromFile(filename);

  sort(players.begin(), players.end());

  printPlayers(players);
}
#包括
#包括
#包括
#包括
#包括
typedef std::deque PlayerContainer;
PlayerContainer GetPlayerFromFile(标准::字符串文件名)
{
玩家包容玩家;
std::ifstream ifs(filename.c_str());
字符串播放器;
while(getline(ifs,player))
玩家。推回(玩家);
返回球员;
}
无效打印玩家(玩家容器常量和玩家)
{
//(这是唯一依赖于C++11的部分)
//对于每个玩家中的每个玩家
用于(自动常量和玩家:玩家)

std::cout
我的任务是能够将文本读入数组,然后对数组进行排序。
为什么在读取数据时要进行排序?如果你是指我插入的随机排序代码,那只是我的挫折。我实际上需要先将文本读入数组,然后再对数组进行操作ReTIT和做任何我需要的。为了教育目的,检查库函数Q排序和它需要什么。@比萨:这是C++,而不是C——<代码>:ST::排序< /代码>是正确使用的函数。嗯,为了说教的目的,也许更好地尝试手动实现排序算法。谢谢你的帮助。我试着输入代码。在阅读之外,正如你所建议的,但是什么也没有发生。程序确实运行了,但是,它好像代码什么都没有做。也许我把它放错位置了?我应该在哪里键入它?谢谢你的帮助,我在阅读之后开始理解它的功能。你帮了大忙,再次感谢!