C++语言程序设计

| 例7-18

#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
{
t=*a;
a++;
b++;
}
if(*w=='\0')//开始，可直接赋值
*w=t;
else if(t!=*w)//如果a,b中较小的当前字符与c中当前字符不等，才赋值
*(++w)=t; //将指针w向后移动一位后赋值
}
if(*a!='\0') //如果字符串a还没有结束，则将a的剩余部分赋给c
while(*a!='\0')
if(*a!=*w)
//判断字符串a中当前字符与w所指字符是否相等，如不等才赋值
{
*(++w)=*a; //赋值前要将w指针向后移动一位
a++;//赋值后将指针a向后移动一位
}
else
a++;
if(*b!='\0') //如果字符串b还没有结束，则将b的剩余部分赋给c
while(*b!='\0')
if(*b!=*w)
{
*(++w)=*b;
b++;
}
else
b++;
*(++w)='\0'; //最后给字符串c的结尾加上'\0'标识
}
void strsort(char *s)//将字符串s中的字符排序
{
int i,j,n;
char t,*w;
w=s; //字符指针w指向字符串s的首地址
for(n=0;*w!='\0';n++)
//将指针w向后移动，直到字符串结束，从而得到字符串长度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]; //用字符变量t作中间变量，从而实现两个数组元素的交换
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);
return 0;
}