对输入'age'名称进行排序,然后显示结果
sorting 'age' of names entered then displaying the result
我想按输入的姓名的升序对年龄进行排序,然后根据这一顺序显示列表。我已经设法对它们进行了排序,但相对于它们的年龄,我似乎无法正确显示它们的名字。
这是我的代码:-
#include <iostream>
using namespace std;
int main()
{
char name [5][25];
int age [5];
int i;
for (i=0 ; i<5 ; i++)
{
cout << "Enter name " << i+1 << " : ";
cin >> name [i];
cout << "Enter age : ";
cin >> age [i];
cout << endl;
}
cout << "n********** Your entered data **********nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<5 ; i++)
{
cout << "t" << name [i] << "tt" << age [i];
cout << endl;
}
int hold;
for (i=0 ; i<5 ; i++)
{
for (int j=0 ; j<5 ; j++)
{
if (age [j] > age [j+1])
{
hold = age [j];
age [j] = age [j+1];
age [j+1] = hold;
}
}
}
cout << "nn******* Sorted data (w.r.t age) *******nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<5 ; i++)
{
cout << "t" << name [i] << "tt" << age [i];
cout << endl;
}
return 0;
}
最后一个for
循环出现问题。你们中有谁能帮我实现这个逻辑吗?
更改交换逻辑。交换姓名和年龄。
char holdstr[25]; ///Temporary string to swap.
if (age [j] > age [j+1] || (age[j] == age[j+1])
{
//Swap the age and name both.
hold = age [j];
strcpy(holdstr, name[j]);
age [j] = age [j+1];
strcpy(name[j], name[j+1]);
age [j+1] = hold;
strcpy(name[j+1], holdstr);
}
您应该将if中的条件封装到函数中,这样您就可以轻松地更改逻辑。
当您用年龄(age
)对数组进行排序时,年龄和它们的名称之间的连接会得到列表:在排序之前,名称和相应的年龄存储在同一索引中。
要解决这个问题,你可以做,例如,如果采用以下方法:
- 当在排序过程中交换两个年龄时,也会交换两个名称
- 使用带有指示名称的指针或索引的辅助数组,并在年龄之外交换名称或索引(类似于第一种方法,但避免交换字符串)。打印时,您可以通过此辅助区域找到相关名称
- 在数组中存储一对名称和年龄,并交换这些对,但仅使用年龄部分来确定排序顺序
还可以使用年龄交换相应的名称。
还有一个建议,每当你有这样的链接数据时,最好使用该结构,因为将相对数据作为一个组是有意义的。
而且,如果你交换它们,所有的数据都会被交换,所以不会出现这种类型的问题。
由于年龄通常从1到120不等:),我们可以利用这一点。使用映射技术将年龄映射到数组索引。当数据集展开时,它将大大加快排序速度。我已经为5个人演示了这一点,但通过链接列表,可以很容易地将其修改为适用于大型数据集。
#include<cstring>
#include <iostream>
using namespace std;
int main()
{
char name [5][25];
int age [5];
int i;
char ary[120][25]; // The array used to map.
for(int i=0;i<120;i++)
strcpy(ary[i],""); //initialize to ""
for (i=0 ; i<5 ; i++)
{
cout << "Enter name " << i+1 << " : ";
cin >> name [i];
cout << "Enter age : ";
cin >> age [i];
cout << endl;
}
cout << "n********** Your entered data **********nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<5 ; i++)
{
cout << "t" << name [i] << "tt" << age [i];
cout << endl;
}
//The sorting , hashing actually
for (i=0 ; i<5 ; i++)
{
strcpy(ary[age[i]],name[i]);
}
cout << "nn******* Sorted data (w.r.t age) *******nn";
cout << "tName" << "tt" << "Agenn";
for (i=0 ; i<120 ; i++)
{
if(strcmp(ary[i],""))
cout<<ary[i]<<" "<<i<<"n"; // The index will be equal to age
}
return 0;
}
相关文章:
- 读取一组用户输入,按升序排序,然后打印结果
- C++ 按数值对元组<字符串、浮点数>然后按字典顺序排序的向量
- 修改的选择排序,选择最大的数字,然后交换到最后
- 如何创建一个C++程序来读取字符串数组中的信息,然后将其排序到类中?
- 如何根据长度然后字母顺序对数组字符串进行排序?
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- 对数组进行排序的算法,先是第一个元素,然后是前 2 个元素,然后是前 3 个元素,依此类推
- 按字母顺序排序字符数组,然后按长度排序
- 按第一个值的递减顺序对一组对进行排序,然后按第二个值的字母顺序排序
- 制作一个对的向量,对其进行排序,然后从中提取向量
- 根据标准对结构向量进行排序,然后显示结果
- 我有不同的类,我想用这些类中的对象制作一个向量,然后按值对其进行排序
- 读取中的链接列表,然后按名称进行排序
- 从文本文件将整数读入简单的链表中.然后对整数列表进行气泡排序并读出到另一个文件
- 是否有插入然后排序的替代方法
- c++我需要将文件中的数据读取到多维数组中,然后用一种数据类型对数组进行排序.怎样
- 插入最有效的数据结构,然后使用不同的条件进行排序
- 如何按第一个,然后是第二个,然后是第三个对 2d 数组进行排序,..使用 C++ 的列
- 对输入'age'名称进行排序,然后显示结果
- 提升ASIO-获得排序的端点(首先是IPv4,然后是IPv6)