64,676
社区成员
发帖
与我相关
我的任务
分享
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;
}
}
不要在交换语句中掺入自增与自减运算符。
s=*p1;
*p1=*p2;
*p2=s;
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;
}