读书人

对字符串做异或交换出现有关问题

发布时间: 2013-03-29 14:24:52 作者: rapoo

对字符串做异或交换,出现问题
整形做异或交换,可以减少一个中间变量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";

[解决办法]
引用:
异或交换有个问题一定要注意,就是自身交换的情况会变成0
i<=n/2去掉等号


++
[解决办法]
不知道lz见没见过不用中间变量也不用异或的交换方法?相当于有瓶子A装了些醋和瓶子B装了些酱油,如何交换后A装的酱油,B装的醋?原理就是把醋倒进B,然后把B中的酱油放进A.在现实中可能无法分离醋和酱油,但是数值计算时可以通过加减法来处理。但是前提是瓶子足够大以存放醋和酱油的合集。懂得交换原理就行了,在这方面搞研究没必要

读书人网 >C++

热点推荐