3

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

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

谁能帮我指出正确的方向?我的任务是能够将文本读入一个数组,然后对该数组进行排序。

4

2 回答 2

1

将不同的动作分成函数是个好主意。这使您的代码更清晰、更易于阅读且更模块化。

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

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

请注意,在 main 中,代码是自记录的:它表示从文件中读取播放器,对它们进行排序,然后打印它们。

#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);
}
于 2012-05-10T22:42:40.427 回答
0

读取数据时不要排序。将排序功能放在阅读之外:

排序(玩家,玩家+30);

如果您想知道重载 dont,请导致 std::string 提供它自己的重载 <、>、= 等。

于 2012-05-10T22:39:31.610 回答