#include#includevoid fun (char *w,int n){char s,*p1,*p2;p1=w;p2=w+m-1;while(p1

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 16:56:09
#include#includevoid fun (char *w,int n){char s,*p1,*p2;p1=w;p2=w+m-1;while(p1

#include#includevoid fun (char *w,int n){char s,*p1,*p2;p1=w;p2=w+m-1;while(p1
#include
#include
void fun (char *w,int n)
{char s,*p1,*p2;
p1=w;p2=w+m-1;
while(p1

#include#includevoid fun (char *w,int n){char s,*p1,*p2;p1=w;p2=w+m-1;while(p1
这个有点纠结,我慢慢说来——
首先 p1 指向第一个字符‘A’,p2 指向最后一个字符‘G’.
然后进入循环:
第一遍开始,把语句拆解一下,等价于:
s = *p1; // s == 'A'
p1++; // *p1 == 'B'
*p1 = *p2; // 'B' 替换成 'G'
p2--; // *p2 == 'F'
*p2 = s; // 把 'F' 替换成 'A'
到此为止,字符串的情况是:AGCDEAG
此时,p1 指向第二个字符,p2 指向倒数第二个字符.仍然满足 p1 < p2 的条件,进入下一轮循环:
s = *p1; // s == 'G'
p1++; // *p1 == 'C'
*p1 = *p2; // 'C' 替换成 'A'
p2--; // *p2 == 'E'
*p2 = s; // 把 'E' 替换成 'G'
到此为止,字符串的情况为:AGADGAG
此时,p1 指向第三个字符,p2 指向倒数第三个字符,仍符合条件,再循环一次:
s = *p1; // s == 'A'
p1++; // *p1 == 'D'
*p1 = *p2; // 'D' 替换成 'A'
p2--; // *p2 == 'A'
*p2 = s; // 把 'A' 替换成 'A',等于没变.
可以看到,现在的字符串已经变成了 AGAAGAG 了.
此时 p1、p2 都指向第四个字符(中间的字符),不满足 p1 < p2,于是循环结束,打印结果.