【发布时间】:2021-12-30 19:43:28
【问题描述】:
免责声明:这些都是假地址,仅供学习使用。
我希望我的列表根据 [i][0] 的第一列进行排序,然后使行的其余部分 ([i][j]) 跟随新的排序位置列。现在我的代码似乎只对第一列进行排序,而不是使整个行跟随它到第一列的新位置。我尝试了很多方法,但都没有找到解决方案。
请帮帮我!
/*
konst.txt includes following:
Stengren Lena Bokstavsgatan 10 27890 Stadköping
Osterblad Johan Grönskog 12A 10908 Ljushöjda
Broholme Reny Havstundav 8 36799 Hökänget
Roholm Karol Stugsten 7 45892 Rågskog
Lindagren Erika Hjufjord 139 87834 Skogholma
*/
string adresser[50][6];
string input_file = "D:\\konst.txt";
ifstream input_stream;
int lastpos = 0;
string temp;
input_stream.open(input_file);
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 6; j++) {
input_stream >> adresser[i][j]; //Saves the columns and rows in the 2d array
cout << adresser[i][j] << ' '; //Writes out the whole list
}
cout << endl;
}
for (int i = 0; i < 50; i++) { //Finds the last position for columns
if (adresser[i][0] == "") {
lastpos = i;
break;
}
}
cout << "\n\n\n\n";
for (int i = lastpos - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (adresser[j][0] > adresser[j + 1][0]) { //Sorts the array for ONLY the first columns.
temp = adresser[j][0];
adresser[j][0] = adresser[j + 1][0];
adresser[j][0] = temp;
}
}
}
提醒一下二维数组包括什么:
/*
Stengren Lena Bokstavsgatan 10 27890 Stadköping
Osterblad Johan Grönskog 12A 10908 Ljushöjda
Broholme Reny Havstundav 8 36799 Hökänget
Roholm Karol Stugsten 7 45892 Rågskog
Lindagren Erika Hjufjord 139 87834 Skogholma
*/
代码的作用:
/*
Broholme Lena Bokstavsgatan 10 27890 Stadköping
Lindagren Johan Grönskog 12A 10908 Ljushöjda
Osterblad Reny Havstundav 8 36799 Hökänget
Roholm Karol Stugsten 7 45892 Rågskog
Stengren Erika Hjufjord 139 87834 Skogholma
*/
我想要它做什么:
/*
Broholme Reny Havstundav 8 36799 Hökänget
Lindagren Erika Hjufjord 139 87834 Skogholma
Osterblad Johan Grönskog 12A 10908 Ljushöjda
Roholm Karol Stugsten 7 45892 Rågskog
Stengren Lena Bokstavsgatan 10 27890 Stadköping
*/
【问题讨论】:
-
在 C++ 中有更好的方法来实现这一点。使用索引来迭代固定长度的数组并不是一个好的开始。但是,如果您正在学习冒泡排序的工作原理,您最好创建一个
struct来保存每个名称/地址记录,然后创建一个数组。
标签: c++ arrays string sorting multidimensional-array