题目:
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; }
运行结果:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于