C++语言程序设计

由于这里用字符数组存储字符串，所以字符串的首地址即字符数组的数组名，函数中都用到了字符串的指针（即字符数组的数组名）作参数。这样，可以在函数中直接对字符串进行操作，字符串指针的移动正是对字符数组元素的依次访问。由于字符数组的末尾要用标志'\0'，所以，程序中根据该表示来判断字符串是否结束。
函数strsort首先用循环的方法，得到字符串的长度，然后根据这个长度对字符串（字符数组）进行排序。排序的时候，是直接对字符数组下标访问的办法来访问每一个字符。
函数strmerge则是首先从两个待合并的字符串的第一个字符开始，寻找其中较小的字符放到字符变量t中，然后把该字符赋给第三个字符串所在的单元。由于两个待合并字符串已经是排好序的了，这样每次比较的、当前最小字符就是两个字符串中的最小字符。如果其中一个字符串结束了，就继续把另一个字符串的剩余部分按照字符不相同原则赋给第三个字符串。最后，第三个字符串加上结束标志'\0'。
本程序通过指针传递函数的参数。当需要把实参的值带回时，我们常常用指针或引用作为函数的参数，我们一定要掌握好，还要理解函数参数值传递与引用传递的区别。下面我们再举一个字符串处理的例子，问题的描述为：.通过运用指针将一个字符串反向，仍然用指针作为函数的参数，程序代码如下：

| 例7-19

#include <stdio.h>
void revstr(char *s) //将字符串s反向
{
char *p=s,c;
while(*p) //找到串结束标记'\0'
p++;
p--;
//指针回退一个字符，保证反向后的字符串有串结束标记'\0'，
//指针p指向串中最后
//一个字符
while(s<p)//当串前面的指针s小于串后面的指针p的时候，进行循环
{
c=*s; //交换两个指针所指向的字符，先将指针s指向的字符存入变量c
*s++=*p;//把指针p指向的字符赋给指针s指向的字符，
// 然后将指针s向后移动1位
*p--=c;//将c中存放的字符赋给指针p指向的地址，
//然后将指针p向前移动1位
}
}
void main()
{
char a[50];
printf("Please input the string:");
scanf("%s",a); //输入字符串
revstr(a);//将该字符串反向
printf("%s",a);//输出反向后的字符串
}

由于数组名就是该数组的首地址，给指向该数组的指针，所以在输入函数printf和反向函数revstr中都直接使用数组名a作为参数。实际上是以字符指针作为参数传递的。
其中函数revstr实现了将一个字符串反向的功能。具体做法是用两个字符指针s和p分别指向字符串的第一个和最后一个字符，利用指针运算?quot;*"实现对所指字符的访问。通过中间变量c的转移，使s和p指向的两个字符交换，然后将s和p分别向字符串中间移动，再进行相同的操作。直到把所有的字符都进行了交换，从而实现了对原字符串对反向。