可能重复:
如何使用指针反转c中的字符串?
面试问题是编写一个函数,调用revstr该函数可以获取字符串并反转它而不使用缓冲区字符串,即涉及指针.我该怎么做呢?
从开始和结束迭代,交换字符.
void revstr(char * str) {
int right = strlen(str) - 1;
int left = 0;
while (left < right) {
char c = str[right];
str[right] = str[left];
str[left] = c;
++left;
--right;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以选择使用xor技巧进行交换而不使用中间字符:
str[right] ^= str[left];
str[left] ^= str[right];
str[right] ^= str[left];
Run Code Online (Sandbox Code Playgroud)
这是一种纯粹无意义的交换方式 - 使用这种结构的唯一原因是一个人为的要求,即你不能将字符串数据存储在中间变量中,也不能调用外部函数.