#include <iostream>
#include <cstring>
using namespace std;
void invert (char *a,int x,int y)
{
char t,*p,*q;
p=a+x;
q=a+y;
while(p<q)
{
t=*p;
*p=*q;
*q=t;
p++;q--;
}
}
int main()
{
char dt[13]="GoodBookNice";
int i=0,n=1;
while(i<8)
{
invert(dt,i,i+5);
cout << "第" << n++ << "次计算:" << endl;
for(int j=i;j<=i+5;j++)
{
cout << dt[j] << ',';
}
cout << endl;
i+=6;
}
cout << "共执行了" << i << "次计算。" <<endl;
return 0;
}
输出结果:
第1次计算:
o,B,d,o,o,G,
第2次计算:
e,c,i,N,k,o,
共执行了12次计算。
讲一下为什么是这样的结果:
这个代码里面的invert函数的作用是,把字符数组的选定范围内的字符反转顺序
如,char a[6]="abcdefg";invert(a,0,6)的结果就是字符数组a内的数据被倒序,即gfedcba,是指字符数组内数据被倒序改动,而不是倒序输出。
主函数的功能就是调用了上面的倒序函数,照这样invert(dt,i,i+5);倒一次,前六个就被倒转,然后倒转的字符被输出。
i+6后,不满足循环条件,又invert(dt,i,i+5)倒转一次,这时候倒转的是dt[6]到dt[11],接着倒转的字符被输出,i再次+6;
满足条件跳出循环,输出一共i次计算,就是12次