我有一个用 C++ 编写的程序,它将生成具有相同教师姓名的文件,这些文件将另外按时间顺序(按天和小时)排序:
<hour> <day> <group> <surname> <subject>
(这里是一个example.txt内容):
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
工作后,程序生成文件:
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
我已经设法做的是将 txt 文件中的数据加载到动态数组中(下面的代码)。我不知道如何进行名称搜索和排序(名称可以不同,行数也可以不同)。我正在考虑一个循环,它会从动态数组的“姓”变量中查找相同的字母,但我不知道如何实现它。
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;
}