1. 程式人生 > >通訊錄排序(c++)

通訊錄排序(c++)

通訊錄排序(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 ); //輸入一行字元,可以有空格,以回車鍵結束