синтаксический разбор по алфавиту

У меня есть список персонажей видеоигр, которые организованы определенным образом.
Я хочу иметь возможность брать их имена только из списка и сортировать их по алфавиту.

Список форматируется:

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

0

Решение

Я вижу, вы работаете непосредственно с файлом для каждого метода (getLast () и т. Д.). Это не лучший способ сделать это, так как доступ к файлу является дорогостоящим и менее эффективным.

Вы должны создать представление файла в памяти: начните с представления каждой строки в виде класса символов, такого как:

class Character
{
public:
Character(const string & firstname, const string & secondname, const string & game, const string & releasedate, const string & score, const string & developer)
:
m_firstname(firstname), m_secondname(secondname), m_game(game), m_releasedate(releasedate), m_score(score), m_developer(developer)
{}

private:

string m_firstname, m_secondname, m_game, m_releasedate, m_score, m_developer;
};

Откройте файл, прочитайте каждую строку, создайте символ, используя проанализированные строки (разделенные запятыми).

Как предложил Тадман в комментарии, вы можете использовать станд :: сортировать способ заказать Персонаж по именам. Реализовать оператора< в классе Character, например:

class Character
{
//...
bool operator<(const Character & c)
{
return m_firstname < c.m_firstname;
}
//...
};

Таким образом, вы можете использовать std :: sort на вашем vector<Character> m_characters

std::sort(m_characters.begin(), m_characters.end());
0

Другие решения

Других решений пока нет …