谁能把这个程序给解释一下,,,
#include<iostream>
#include<string>
using namespace std;
void fun(char*w,int m)
{
char s,*p1,*p2;
p1=w;
p2=w+m-1;
while(p1<p2)
{
s=*p1++;*p1=*p2--;*p2=s;}
}
void main()
{
char a[]="1234567";
fun(a,strlen(a));
cout<<a<<endl;
}
iostream fun string
[解决办法]
p1=w; // p1指向'1'所在地址
p2=w+m-1; // p2指向'7'所在地址
while(p1<p2)
{
s=*p1++; // s='1' p1指向'2'所在地址
*p1=*p2--; // '2'替换成'7'.. p2指向‘6’所在地址
*p2=s; // '6'替换成'1' 结果是 1734517
我去,你是想实现首尾互换么,建议先互换好再自增自减……
temp = *p1;
*p1=*p2;
*p2 = temp;
++p1;
--p2;
}
[解决办法]
#include<iostream>
#include<string>
using namespace std;
void fun(char*w,int m)
{
char s,*p1,*p2;
//设p1为参数字符(串)w的起始地址
p1=w;
//设p2为w起始地址后第m-1个位置的地址
p2=w+m-1;
//设置循环条件,即在上述复制地址后,p1如果在p2前面就进入循环
while(p1<p2)
{
//s为p1地址当前的字符,随即p1跳跃到下一个地址(递进1),再将p1地址(递进后的地址)处的字符赋值为p2处的字符,p2随即跳到上一个地址,再将新的p2地址处赋值为s的字符。
s=*p1++;*p1=*p2--;*p2=s;
}
}
/*
从上述函数的代码来看,这个函数的作用是把选定字符串首尾字符不变,而中间部分实际也变成首尾字符的交替循环。
*/
void main()
{
char a[]="1234567";
fun(a,strlen(a));
cout<<a<<endl;
}
void fun(char*w,int m)
{
char s,*p1,*p2;
p1=w; //p1指向数组的起始地址
p2=w+m-1; //将p2指向数组的末尾地址
while(p1<p2)
{
s=*p1++; //但是你的这句话就不对了,你在这里将p1自增会作用在下一句上的
*p1=*p2--;
*p2=s;
}
}