连载三

/*合并电话簿

输入 

有两本电话簿的描述。描述每本电话簿的第一行是一个正整数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

#include

#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

{

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

{

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

{

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

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

num2++;

num++;

}

else

while(num1

{

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<

for(int i=0;i

cout<

}

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;

}       


连载三_第1张图片
图片发自App


你可能感兴趣的:(连载三)