2012-05-10 57 views
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; 
} 

誰能幫我指出了正確的方向?我的任務是能夠將文本讀入數組,然後對該數組進行排序。

+3

'我的任務是能夠將文本讀入數組,然後對該數組進行排序。「爲什麼在閱讀數據時進行排序? –

+0

如果你指的是那個隨機的排序代碼,我在那裏推,那只是我的沮喪。實際上我需要首先將文本讀入數組,然後通過對數組進行排序並執行我需要的任何其他操作來操作數組。 – Jeppyboy

+0

爲教育目的,檢查庫函數qsort和它需要什麼。 – pizza

回答

0

不要在閱讀數據時進行排序。把排序功能放在外面閱讀:

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

如果你想知道關於不要超載,造成的std :: string提供它自己的重載<,> =,等等,等等

+0

謝謝你的幫助。我試着按照你的建議在閱讀之外輸入代碼,但沒有發生任何事情。該程序確實運行,但它的代碼沒有做任何事情。也許我把它放在了錯誤的地方?我應該在哪裏輸入? – Jeppyboy

1

這是不同的動作分成功能是個好主意。這使您的代碼更清晰,更易於閱讀,並且更加模塊化。

例如,在這個問題中,你有三件不同的事情發生:將數據讀入文件,對其進行分類並打印。編寫自己的函數來讀取數據並將其打印出來。你知道已經有一個函數需要排序,所以使用它。

以下是一個示例(使用一點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); 
} 
+0

感謝您的幫助,我開始瞭解它在閱讀後如何運作。你一直很好,再次感謝! – Jeppyboy

相關問題