题目:
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;
}
运行结果:
文章转载自我的非鱼物语 本文固定链接为:http://linuxue.com/archives/15