本题要求实现一个字符串逆序的简单函数。
函数接口定义:
void f( char *p );
函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 20
void f( char *p );
void ReadString( char s ); / 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
Hello World!
输出样例:
!dlroW olleH
void f( char *p ){
int len=0;
while(p[len]){
len++;
}
for(int i=0;i<len/2;i++){//特别要注意这里是i<cnt/2,而不是i<=cnt/2;如果有等号,则在数组元素个数为偶数个的情况下,多交换一次导致错误,//如4个元素,a b c d 就会逆序为 d b c a,因为 在交换b,c之后,最后一轮循环i==4/2==2,此时又将交换好的d c b a 中的 c 和b 交换了一次
char temp=p[i];
p[i]=p[len-1-i];
p[len-1-i]=temp;
}
}