连载三

作者: 逍遥_9353 | 来源:发表于2018-07-12 08:48 被阅读24次

/*合并电话簿

输入 

有两本电话簿的描述。描述每本电话簿的第一行是一个正整数n(n<50),接下来有n行,

每行是一个人数据,包括姓、名、所在城市和电话号码。每本电话簿都按姓以字典序

升序排列。

输出 

对这两本电话簿进行合并,使合并后仍然按姓以字典序升序排序。首先输出合并后的

个人数据总数,接着输出个人信息。如果两本电话簿中的个人数据完全一致,则保留

一个。如果两个人的姓相同,那么先出现的人仍然在前。

样例输入

2

Dupont Albert Paris 45247000

Smith John Washington 18554420

3

Brown Gordon London 44863645

Martin Martin Troyes 25452829

Popov Nikolai Moscow 18222931

样例输出

5

Brown Gordon London 44863645

Dupont Albert Paris 45247000

Martin Martin Troyes 25452829

Popov Nikolai Moscow 18222931

Smith John Washington 18554420

*/ 


思路分析:为了能够合并两本电话簿,需将第一本中的姓与第二本中的姓利用strcmp函数进行比较,如果第一个本中的姓在第二本中的姓的前面的话,其值为负,相同其值为0,否则为正;还需要注意两个人的姓相同时的情况。


#include<iostream>

#include<cstring>

#define m 50

using namespace std;

typedef struct phonelist

{

char s[m];

char p[m];

}phoneform;

void readdata(phoneform *pp,int n)//读取电话簿

{

for(int i=0;i<n;i++)

{

cin>>pp[i].s;

cin.getline(pp[i].p,30);

}

}

phoneform *pmerge(phoneform *p1,phoneform *p2,int n1,int n2,int *total)//合并电话簿

{

int num1=0,num2=0,num=0,pd;

phoneform *pp=new phoneform[(n1+n2)*sizeof(phoneform)];

while((num1<n1)&&(num2<n2))

{

pd=strcmp(p1[num1].s,p2[num2].s);

if(pd<0||pd==0&&strcmp(p1[num1].p,p2[num2].p)!=0)

{

strcpy(pp[num].s,p1[num1].s);

strcpy(pp[num].p,p1[num1].p);

num1++;

}

else

if(strcmp(p1[num1].p,p2[num2].p)==0)

{

strcpy(pp[num].s,p1[num1].s);

strcpy(pp[num].p,p1[num1].p);

num1++;

num2++;

}

else

{

strcpy(pp[num].s,p2[num2].s);

strcpy(pp[num].p,p2[num2].p);

num2++;

}

num++;

}

if(num1==n1)

while(num2<n2)

{

strcpy(pp[num].s,p2[num2].s);

strcpy(pp[num].p,p2[num2].p);

num2++;

num++;

}

else

while(num1<n1)

{

strcpy(pp[num].s,p1[num1].s);

strcpy(pp[num].p,p1[num1].p);

num1++;

num++;

}

*total = num;

return pp;

}

void pshow(phoneform *pp,int n)//输出电话簿

{

cout<<n<<endl;

for(int i=0;i<n;i++)

cout<<pp[i].s<<" "<<pp[i].p<<endl;

}

int main()

{

phoneform *p1,*p2,*p;

int n1,n2,n;

cin>>n1;

p1 = new phoneform[n1*sizeof(phoneform)];

readdata(p1,n1);

cin>>n2;

p2 = new phoneform[n2*sizeof(phoneform)];

readdata(p2,n2);

p = pmerge(p1,p2,n1,n2,&n);

pshow(p,n);

return 0;

}       


连载三

相关文章

  • 【目录】

    【连载】落落无闻 (一) 【连载】落落无闻 (二) 【连载】落落无闻 (三上) 【连载】落落无闻 (三下) 【连载...

  • 【连载】断腿之后(六)

    【连载】断腿之后 (一) 【连载】断腿之后(二) 【连载】断腿之后(三) 【连载】断腿之后(四) 【连载】断腿以后...

  • 【连载】生命的节点 目录

    【连载】生命的节点 前言 【连载】生命的节点(一)苏醒 【连载】生命的节点(二)天生优秀 【连载】生命的节点(三)...

  • [连载]记晨忆暮 目录

    [连载]记晨忆暮(一) [连载]记晨忆暮(二) [连载]记晨忆暮(三) [连载]记晨忆暮(四) [连载]记晨忆暮(...

  • 【连载】断腿以后(五)

    【连载】断腿之后 (一)【连载】断腿之后(二)【连载】断腿之后(三)【连载】断腿之后(四) 为什么这么说呢?因为这...

  • 连载005:房树人绘画心理学揭开你内心的秘密

    房树人连载系列: 连载 | 房树人之整体分析(一)连载 | 房树人之房子分析(二)连载 | 房树人之树木分析(三)...

  • 连载004:房树人绘画心理学揭开你内心的秘密

    房树人连载系列: 连载 | 房树人之整体分析(一)连载 | 房树人之房子分析(二)连载 | 房树人之树木分析(三)...

  • 【连载】婚到底该不该结——目录

    【连载】婚到底该不该结——(一)【连载】婚到底该不该结——(二)【连载】婚到底该不该结——(三)【连载】婚到底该不...

  • 《辛奴》目录

    连载《辛奴》——楔子 连载《辛奴》——第一章 连载《辛奴》——第二章 连载《辛奴》——第三章 连载《辛奴》——第四...

  • 目录

    目录【连载】我在终点等你(一+番外)【连载】我在终点等你(二)【连载】我在终点等你(三)【连载】我在终点等你(四)...

网友评论

    本文标题:连载三

    本文链接:https://www.haomeiwen.com/subject/ftllpftx.html