到目前为止,我已经找到了几种方法将文本文件读入数组,并能够成功地在屏幕上显示它。 我遇到的问题是如何从那里对数组进行排序。对文本文件进行排序很简单但是当我尝试将两者结合起来时,我无法让它工作。 这是我到目前为止所得到的:
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;
}
任何人都可以帮我指出正确的方向吗?我的任务是能够将文本读入数组,然后对该数组进行排序。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
在阅读数据时不要排序。将sort函数放在读数之外:
排序(球员,球员+30);
如果你想知道重载不要,导致std :: string提供它自己的重载&lt ;,&gt;,=等等。