昨天和同事聊天聊到了这个问题,今天写了个实现,放上来供大家拍砖。
主要思路是利用抑或操作!
#include <stdio.h>
#include <string.h>
void swap_char(char *p, int len)
{
if (NULL == p || len <= 0) {
return;
}
len--; // 保证p+len指向最后一个待交换的字符
while (p < (p+len)) {
*p = *p ^ p[len]; // a ^ b = c
p[len] = *p ^ p[len]; // a ^ c = b
*p = *p ^ p[len]; // b ^ c = a
p++; // p指向第一个待交换字符
len -=2; // 保证p+len指向最后一个待交换的字符
}
}
int main(int argc, char **argv)
{
if (argc != 2) {
return -1;
}
printf("%s\n", argv[1]);
swap_char(argv[1], strlen(argv[1]));
printf("%s\n", argv[1]);
return 0;
}