【发布时间】:2021-11-23 15:49:46
【问题描述】:
我是一个初学者,我们的活动是关于排序算法,我们需要根据姓氏或名字对文本文件中的输入进行排序。有谁知道如何从文本文件中对列进行排序?而且,我不知道如何合并其他列,以便根据名字对其进行相应的排序。谢谢您的帮助!这是我的代码:
void sortFirst() {
string sortedFirst;
string firstname[20];
string key;
string col1;
string col2;
string col3;
ifstream sortByFirst;
cout << "\n\n\tSORTED BY FIRST NAME ================\n\n";
sortByFirst.open("student-file.txt");
while(getline(sortByFirst, sortedFirst))
{
istringstream iss(sortedFirst);
iss >> col1 >> col2 >> col3;
// cout << "\t" << col2 << endl;
for (int i = 0; i<1; i++) {
firstname[i] = col2;
// cout << "\n" << firstname[i];
for (int a = 1, b = 0; a < 20; a++) {
key = firstname[a];
b = a-1;
while (b >= 0 && firstname[b] > key) {
firstname[b+1] = firstname[b];
b--;
}
firstname[b+1] = key;
}
}
}
for (int k = 1; k < 20; k++) {
cout << "\n\t" << firstname[k];
}
sortByFirst.close();
}
这是我需要按名字按字母顺序排序的文本文件:
| LASTNAME | FIRSTNAME | GRADE |
|---|---|---|
| Lorzano | Jeff | 78.23 |
| Garcia | Zen | 89.56 |
| Villa | Luz | 98.25 |
| Mercado | Cherrie | 92.10 |
| Lopez | Cecile | 74.10 |
| Garcia | LJ | 89.45 |
| Lina | Carol | 97.55 |
| Villegas | Cindy | 78.89 |
| Litan | Irene | 84.52 |
| Austria | Lina | 89.00 |
| Chavez | Cheska | 91.65 |
| DelosReyes | Melody | 70.00 |
| Wong | Chris | 87.00 |
| Maralit | Ian | 75.45 |
| Estrella | Ashton | 88.00 |
| Fernandez | Carmela | 99.05 |
| Benitez | Sally | 81.20 |
| Abanilla | Joseph | 79.35 |
【问题讨论】:
-
“有谁知道如何从文本文件中对列进行排序”是什么意思?您需要收集所有行并将它们聚合到一个数据结构中,例如
struct Node { string firstname; stirng secondname; float grade; },然后在创建这样的容器后,您可以按名称、第二个名称或等级调用排序算法。 -
首先您需要阅读每一行并将其拆分为名字、姓氏和年级
-
您没有按照姓氏对文本文件进行排序。您正在对完整的行进行排序,而忽略了它们的内部结构。为了按内部结构的某些元素排序,无论是姓氏、名字还是等级,您需要能够从输入中仅提取该元素。你应该如何做到这一点取决于你已经学习了多少 C++,以及 imp[ut 文件的格式。这些参数我都不知道,但是这里有几个关键字供以后搜索:
struct、std::string:substr、std::stringstream、>>。 -
我已经把它分开了,但我怎么能把它存储在数组中? sortByFirst.open("学生文件.txt"); while(getline(sortByFirst, sortedFirst)) { istringstream iss(sortedFirst); ISS >> col1 >> col2 >> col3; cout
-
这样不行。您需要存储整个学生信息,并将整个学生信息移动到数组中的新位置。不仅仅是您比较的列。我建议将学生信息表示为 struct,而不是字符串。然后你可以只比较结构的一个元素,但移动并打印整个结构。
标签: c++ sorting columnsorting