我想要做的是对学生进行排序'文本文件中的详细信息,基于其名字,ID,结果和成绩。
以下是我Text_File.txt
的样子:(每个单词都以标签分隔' \ t')
rose ramzi 154ss6 85 A
john watson 123aq1 96 A+
ellen thomas qs2115 75 B+
我正在尝试根据第三个单词(这是学生的ID)按升序对文本文件中的行进行排序。
我能够使用名字对列表进行排序,并且我可以提取第三个单词并尝试使用sort()
函数,但它仍然没有按ID排序。
这是我的sorting_by_id
代码:
int main() {
fstream input("Text_File.txt", ios::in | ios::out);
string line;
vector<string> lines;
while (getline(input, line))
lines.push_back(line);
sort(lines.begin(), lines.end(), [](const string& a, const string& b) {
int wordStartPositionA = 0, wordStartPositionB = 0;//The start of each word in the string
for (int i = 0; i < 2; i++)//looking for the third word in 1st sentence
wordStartPositionA = a.find_first_of(' ', wordStartPositionA + 1);
for (int i = 0; i < 2; i++)//looking for the third word in 2nd sentence
wordStartPositionB = b.find_first_of(' ', wordStartPositionB + 1);
//Getting where our word ends:
int wordEndPositionA = a.find_first_of(' ', wordStartPositionA + 1);
int wordEndPositionB = b.find_first_of(' ', wordStartPositionB + 1);
//Getting the desired word
string resultA = a.substr(wordStartPositionA + 1, a.length() - wordEndPositionA - 1);
string resultB = b.substr(wordStartPositionB + 1, b.length() - wordEndPositionB - 1);
//cout << resultA << " " << resultB << endl;
return resultA < resultB;
});
for_each(lines.begin(), lines.end(), [](const string& s) {
cout << s << endl; });
getchar();
return 0;
}
我的目标是根据学生的身份证号码对学生进行排序。
感谢您的帮助:)
答案 0 :(得分:2)
您需要一些数据抽象。
首先定义合适的数据类型:
struct Student
{
std::string firstName;
std::string lastName;
std::string id;
int result;
std::string grade;
};
然后你定义如何阅读其中一个:
std::istream& operator>>(std::istream& is, Student& s)
{
return is >> s.firstName >> s.lastName >> s.id >> s.result >> s.grade;
}
然后你读了它们:
int main()
{
std::ifstream input("Text_File.txt");
std::vector<Student> students;
Student s;
while (input >> s)
{
students.push_back(s);
}
然后你可以通过id轻松地对它们进行排序:
std::sort(students.begin(),
students.end(),
[](const Student& s1, const Student& s2) { return s1.id < s2.id; });
或减少结果:
std::sort(students.begin(),
students.end(),
[](const Student& s1, const Student& s2) { return s1.result > s2.result; });
或任何其他。