通讯录排序(c++)

版权声明:本文为博主原创,未经博主允许不得转载 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;
}

笔记:

  1. C++中输入一串字符的函数有多种:
    (1)C标准函数,存储字符到字符数组中:
       char str[100];
       scanf("%s", str ) ; //读入一串字符,不能包括空格
       gets(str); //输入一行字符,可以有空格,以回车键结束
    (2)C++函数,可以存储到字符数组,也可以存储到string类对象中:
       string str;
       cin >> str ; //读入一串字符,不能包括空格
       getline(cin,str ); //输入一行字符,可以有空格,以回车键结束

猜你喜欢

转载自blog.csdn.net/Sherry_Yue/article/details/83685285
今日推荐