### why won't this work

in regard this post:
http://www.cplusplus.com/forum/lounge/86612/#msg465228

i tried to do this:
 ``123456789`` ``````#include void reverse(char s[]) { for (int i = 0, j = strlen(s)-1; i < j; i++, j--) { s[i]^=s[j]^=s[i]^=s[j]; } }``````

but when i try and use it it does not work, am i making a stupid mistake somewhere?
`s[i]^=s[j]^=s[i]^=s[j];`
Why this? As far as I see, this is going to do no such reversing.
I don't really know, but I noticed that...
`i < j;` should be `i <= j;`
If there's an error it's in the xor group.

Looking at wikipedia it should be like:

 ``123`` ``````s[i] ^= s[j]; s[j] ^= s[i]; s[i] ^= s[j];``````

So it should work as you wrote it?
Last edited on
`s[i]^=s[j]^=s[i]^=s[j];` is undefined (for scalar types, such as char)
 s[i]^=s[j]^=s[i]^=s[j]; is undefined (for scalar types, such as char)

then why does this work:
 ``1234567`` ``````#include int main() { char a='a', b='b'; a^=b^=a^=b; std::cout<

 i < j; should be i <= j;

why, if i==j, then they are pointing to the same character, why swap them?

@Resident Biscuit
it is a technique I learnt in A to Z of C I was also confused at first, but it is quite useful - well at least with numbers
> but when i try and use it it does not work
¿how are you using it?
i try your code, i can work ,
make sure the param 'a' is not readonly.
this works:
 ``123456789`` ``````void reverse(char s[]) { for (int i = 0, j = strlen(s)-1; i < j; i++, j--) { s[i]^=s[j]; s[j]^=s[i]; s[i]^=s[j]; } }``````

thanks guys :)
Last edited on
That works, but it's obfuscated and slow, compared to the example linked in the first post.
Topic archived. No new replies allowed.