C++语言程序设计

程序：
根据上面的分析，我们可以写出下面的程序。

| 例7-17

#include <stdio.h>
void strmerge(char *a,char *b,char *c)//将字符串a,b合并到字符串c中
{
char t,*w;
w=c;
while((*a!='\0')&&(*b!='\0'))
{
//找到字符串a,b当前字符中较小的字符
if(*a<*b)
{
t=*a;
a++;
}
else if(*a>*b)
{
t=*b;
b++;
}
else //字符串a,b当前字符相等
{
t=*a;
a++;
b++;
}
if(*w=='\0')//开始，可直接赋值
*w=t;
else if(t!=*w)
//如果a,b中较小的当前字符与c中当前字符不等，才赋值
*(++w)=t;
}
if(*a!='\0') //如果字符串a还没有结束，则将a的剩余部分赋给c
while(*a!='\0')
if(*a!=*w)
{
*(++w)=*a;
a++;
}
else
a++;
if(*b!='\0') //如果字符串b还没有结束，则将b的剩余部分赋给c
while(*b!='\0')
if(*b!=*w)
{
*(++w)=*b;
b++;
}
else
b++;
*(++w)='\0';
}

void strsort(char *s)//将字符串s中的字符排序
{
int i,j,n;
char t,*w;
w=s;
for(n=0;*w!='\0';n++) //得到字符串长度n
w++;
for(i=0;i<n-1;i++) //对字符串s进行排序，按字母先后顺序
for(j=i+1;j<n;j++)
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}

void main()
{
char s1[100],s2[100],s3[100];
printf("\nPlease input the first string:");
scanf("%s",s1);
printf("\nPlease input the second string:");
scanf("%s",s2);
strsort(s1);//将字符串s1排序
strsort(s2); //将字符串s2排序
printf("%s\n",s1);
printf("%s\n",s2);
s3[0]='\0'; //字符串s3的第一个字符先置'\0'结束标志
strmerge(s1,s2,s3);//将s1和s2合并，按照字母顺序排列，
//且要删去相同字符，存入s3中
printf("%s",s3);
}

该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序，并删去相同字符。在主函数里，先输入两个字符串s1和s2，然后调用strsort函数对它们分别排序，然后调用strmerge函数将s1和s2合并，将合并后的字符串赋给字符串s3，最后输出字符串s3。
运行该程序，并输入：
Please input the first string: China↙
Please input the second string: Beijing↙
输出结果为：
Cahin
Begiijn
BCaeghijn