版权声明:本文为博主原创,未经博主允许不得转载 https://blog.csdn.net/Sherry_Yue/article/details/83685285
通讯录排序(c++)
【问题描述】
建立一个通讯录的结构记录,包括姓名、生日、电话号码。输入n(n<10)个朋友的信息,再按他们的年龄从大到小的顺序依次输出其信息
【输入形式】
先输入朋友数n(整型,n<10),再依次输入每个朋友的姓名(字符串)、生日(整型)、和电话号码(字符串)。
【输入输出样例】
Input n:3
Input the name,birthday,number of the 1 friend:zhang 19850403 13912345678
Input the name,birthday,number of the 2 friend:wang 19821020 0571-88018448
Input the name,birthday,number of the 3 friend:qian 19840619 13609876543
wang□19821020□0571-88018448
qian□19840619□13609876543
zhang□19850403□13912345678
【样例说明】
按朋友年龄从大到小的顺序依次输出每位朋友的信息,内容与格式如下
姓名□生日□电话号码
%s□%d□%s
□表示空格
题目难点
1. 调用数组做存储
2. 数组定义为string型,这样就可以存放多个字母(如果用char型,就只能存放一个字符)
问题解答
#include <iostream>
using namespace std;
void sort(int [],string [],string [],int);//排序函数
int main()
{
int n,bir[10];
string name[10],tel[10];//注意数组类型
cout<<"Input n:";
cin>>n;
cout<<endl;
for(int i=0;i<n;++i)//分别给三个数组赋值
{
cout<<"Input the name,birthday,number of the "<<i+1<<" friend:";
cin>>name[i]>>bir[i]>>tel[i];
cout<<endl;
}
sort(bir,name,tel,n);//调用排序函数
return 0;
}
void sort(int bir[],string name[],string tel[],int n)
{
for(int i=0;i<n-1;++i)//经典选择排序
{
int index=i,temp1;
string temp2,temp3;//注意类型
for(int j=index+1;j<n;++j)
if(bir[j]<bir[index]) index=j;//注意:这边用小于号,因为生日年龄从大到小排序和普通数字从大到小排序正好是相反的
//下面代码实现的是经典的交换两个数组元素(只不过同时交换了3组数组)
//因为不可能你单单交换生日大小,不然就窜改数据了,每个人和他的生日电话就匹配不上了
temp1=bir[i];temp2=name[i];temp3=tel[i];
bir[i]=bir[index];name[i]=name[index];tel[i]=tel[index];
bir[index]=temp1;name[index]=temp2;tel[index]=temp3;
}
for(int i=0;i<n;++i)
cout<<name[i]<<" "<<bir[i]<<" "<<tel[i]<<endl;
}
笔记:
- C++中输入一串字符的函数有多种:
(1)C标准函数,存储字符到字符数组中:
char str[100];
scanf("%s", str ) ; //读入一串字符,不能包括空格
gets(str); //输入一行字符,可以有空格,以回车键结束
(2)C++函数,可以存储到字符数组,也可以存储到string类对象中:
string str;
cin >> str ; //读入一串字符,不能包括空格
getline(cin,str ); //输入一行字符,可以有空格,以回车键结束