私は特定の方法で編成されたビデオゲームの文字のリストを持っています。 私はその名前だけをリストから取り出し、アルファベット順に並べ替えることができたいと思っています。アルファベット順に並べ替えるC++
リストがでフォーマットされます。リストがある
Last Name, First Name, Game, Relase Date, Score, Developer
:
Snake, Solid, Metal Gear Solid, 9/3/1998, 94, Konami
Drake, Nathan, Uncharted, 11/19/2007, 90, Naughty Dog
Guy, Doom, Doom, 5/13/1993, 95, iD
私が欲しいの出力は次のようになります。
Drake, Nathan
Guy, Doom
Snake, Solid
私だけでそこに名前をプリントアウトすることができますそれらがテキストファイル内にある順序。どのように私は姓を比較し、フルネームをプリントアウトするのですか?ここで
は、これまでの私のコードです:
#include <fstream>
#include <iostream>
#include <string>
#include <time.h>
#include <cstdlib>
#include <sstream>
using namespace std;
ifstream inFile;
class Characher{
private:
string first;
string last;
public:
Character(){};
void getLast(){
if(inFile.is_open()){
getline(inFile, last,',');
} else {
cout<<"Hmm.."<<endl;
}
}
void getFirst(){
if(inFile.is_open()){
getline(inFile, first,',');
} else {
cout<<"No First Name here..."<<endl;
}
}
void printLast(){
cout<<last<<",";
}
void printFirst(){
cout<<first<<endl;
}
};
class Dev{
private:
string Developer;
public:
Dev(){};//null constructor
void printDeveloper(){
cout<<"Developer: "<<Developer<<endl;
}
void getDeveloper(){
if(inFile.is_open()){
getline(inFile, Developer);
} else {
cout<<"Nothing here..."<<endl;
}
}
};
class Game{
private:
string game;
public:
Game(){};
void getGameName(){
if(inFile.is_open()){
getline(inFile, game,',');
} else{
cout<<"What game was they frum?"<<endl;
}
}
void printGame(){
cout<<"Game: "<<game;
}
};
class RelDate_And_Score{
private:
string ReleaseDate;
string Score;
public:
RelDate_And_Score(){};
void GetRelDate(){
if(inFile.is_open()){
getline(inFile, ReleaseDate, ',');
} else{
cout<<"Could not find Release Date"<<endl;}
}
void getScore(){
if(inFile.is_open()){
getline(inFile, Score, ',');
} else{
cout<<"Could not find Score"<<endl;}
}
void PrintDate(){
cout<<"Release Date: "<<ReleaseDate<<" | ";}
void PrintScore(){
cout<<"Score: "<<Score<<endl;}
};
int main(){
inFile.open("Games.dat");
Dev d;
Characher c;
RelDate_And_Score r;
Game g;
for (int i=0; i<3; i++)
{
c.getLast();
c.getFirst();
g.getGameName();
r.GetRelDate();
r.getScore();
d.getDeveloper();
c.printLast();
c.printFirst();
}
return 0;
}
にはstd ::並べ替えを使用することができます。文字クラスなどでオペレータ<を実装します。 //en.cppreference.com/w/cpp/algorithm/sort)?あなたのオブジェクトに 'operator <'を定義するか、それらを比較できる 'Compare'関数を書いてください。 – tadman
ファイルの順序を変更することはできません。そのため、メモリ内にコピーが必要です。マップを作成し、マップにすべての行を追加し、その名前をキーとします。マップ上のループでソートされたものが表示されます – Lanting
文字、ゲーム、日付などの異なるクラスを使用したデザインで、各クラスを開き、グローバルファイルオブジェクトにアクセスすると、必要以上に複雑になります。同じ行を読むことで干渉します。文字、ゲーム、...などの文字列メンバーを1行に1つのクラスインスタンスを持つ方が簡単です(これらのクラスのインスタンスをベクターに入れます(ループ内で番号3を使用せず、柔軟に保つ)。ベクトルに対して 'std :: sort'を使います。 –