对字符串做异或交换,出现问题
整形做异或交换,可以减少一个中间变量temp
如
int a,b;
a=a^b;
b=a^b;
a=a^b;
实现a,b内容的交换
换成char型有问题,代码如下,有点晕,不知道出啥问题了
#include <iostream>
using namespace std;
void reverse(char *str)
{
//n为字符串长度
int n=strlen(str)-1;
for(int i=0;i<=n/2;++i){
str[i]=str[i]^str[n-i];
str[n-i]=str[i]^str[n-i];
str[i]=str[i]^str[n-i];
}
cout<<str<<endl;
}
void main()
{
char str[]="I am a student.";
reverse(str);
system("pause");
}
求助各位,谢谢啦~
[解决办法]
异或交换有个问题一定要注意,就是自身交换的情况会变成0
i<=n/2去掉等号
[解决办法]
奇技淫巧,完全没有必要。
//char str[]="I am a student.";
char str[]="I am a student";
[解决办法]
++
[解决办法]
不知道lz见没见过不用中间变量也不用异或的交换方法?相当于有瓶子A装了些醋和瓶子B装了些酱油,如何交换后A装的酱油,B装的醋?原理就是把醋倒进B,然后把B中的酱油放进A.在现实中可能无法分离醋和酱油,但是数值计算时可以通过加减法来处理。但是前提是瓶子足够大以存放醋和酱油的合集。懂得交换原理就行了,在这方面搞研究没必要