I have a program to write in C++ that will generate files with the names of the same teachers, which are to be additionally sorted chronologically (by day and hour):
<hour> <day> <group> <surname> <subject>
(here is an example.txt content):
10:15-11:30 Friday gr1 Smith Programming
07:10-09:15 Wednesday gr2 Taylor InternetofThings
11:00-12:00 Monday gr2 Smith Java
10:20-11:45 Thursday gr1 Taylor Matchematic
and after working, program generate files:
Smith.txt :
11:00-12:00 Monday gr2 Java
10:15-11:30 Friday gr1 Programming
Taylor.txt :
07:10-09:15 Wednesday gr2 InternetofThings
10:20-11:45 Thursday gr1 Matchematic
What I've already managed to do is to load data from the txt file into the dynamic array (code below). I have no idea how to do a name search and sorting (names can be different and the number of lines can also be different). I can use stuff only from the standard library. Can't use map <> container.
What I have tried:
struct Line {
string hour;
string day;
string group;
string surname;
string subject;
};
void readLine(ifstream& file, Line& line) {
file >> line.hour >> line.day >> line.group >> line.surname >> line.subject;
}
void readLineTab(ifstream& file, Line* lineTab, const int numOfLines) {
for (int i = 0; i < numOfLines; i++) {
readLine(file, lineTab[i]);
}
}
void printLine(const Line& line) {
cout << line.hour << " " << line.day << " " << line.group << " " << line.surname << " " <<
line.subject << endl;
}
void printLineTab(Line* lineTab, const int size) {
for (int i = 0; i < size; i++) {
printLine(lineTab[i]);
}
}
int checkFile(string& filePath, int& numOfLines) {
ifstream file;
file.open(filePath.c_str());
if (file.fail()) {
cerr << "Error file open: " << filePath << endl;
file.close();
return 1;
}
string line;
int lineNr = 0;
while (getline(file, line)) {
lineNr++;
numOfLines++;
}
file.close();
return 0;
}
int main(int argc, char** argv) {
int numOfLines = 0;
ifstream file;
string filePath = "example.txt";
if (checkFile(filePath, numOfLines)) {
return 1;
}
Line* lineTab = new Line[numOfLines];
file.open(filePath.c_str());
if (file.fail()) {
cerr << "Error file open: " << filePath << endl;
return 1;
}
readLineTab(file, lineTab, numOfLines);
printLineTab(lineTab, numOfLines);
delete[] lineTab;
file.close();
return 0;
}