问答题
请编一个函数fun(char*s),该函数的功能是:把字符串中的内容逆置。
例如,字符串中原有的字符串为“abcdefg”,则调用该函数后,串中的内容为“gfedcba”。
注意
:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<string.h>
#include<conio.h>
#include<stdio.h>
#define N 81
void fun(char *s)
{
}
main()
{
char a[N];
printf("Enter a string:");
gets (a);
printf("The original string is:");
puts(a);
fun(a);
printf("/n");
printf("The string after modified:");
puts(a);
strcpy(a,"Hello world!");
fun(a);
}
【正确答案】
【答案解析】void fun(char*s)
{
char ch;
int i,m,n;
i=0;
m=n=strlen(s)-1;
/*将第i个和倒数第i个数互换,但循环的次数为数组长度的一半*/
while(i<(n+1)/2)
{
/*使用中间变量叫唤*/
ch=s[i];
s[i]=s[m];
s[m]=ch;
i++; m--;
}
}
[解析] 将字符串中的内容逆置,实际上就是将第一个字符和最后一个字符交换,再将第二个字符与倒数第二个字符交换,依此类推,直到中间的字符为止。因此,长度为n的字符串需要交换的次数为n/2。
本程序使用while语句表示每一个字符,然后将前后对应的字符进行交换。