题目:
Implement a function void reverse(char* str) in C or C++ which reverses a null-terminated string.
用 C 或 C++ 实现一个翻转 C 风格字符串的功能函数
解答
C 风格字符串即为末尾以'\0'结尾的字符串,例如字符串"hello",其末尾为'\0',字符串长度为 6
解题思路:我们可以使用两个指针,一个指向字符串开头,另一个指向字符串末尾'\0'前一个字符位置,循环交换两处字符即可。代码如下:
void swap(char *a, char*b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void reverse(char *str)
{
char *p, *q;
p = q = str;
while (*q != '\0')
q++;
q--;
while (p < q)
{
swap(p++, q--);
}
}
或者我们可以先获取字符串的长度再交换也是可以的。这种方法代码如下:
void swap(char *a, char*b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void reverse2(char *str)
{
char *p = str;
int len = 0;
int i;
while (*p++ != '\0')
{
len++;
}
for (i = 0; i < len / 2; i++)
{
swap(&str[i], &str[len - i - 1]);
}
}
测试代码如下:
int main(void)
{
char buf[] = "Hello World!";
printf("Before reverse : %s\n", buf);
reverse2(buf);
printf("After reverse : %s\n", buf);
getchar();
return 0;
}
运行结果:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于