Cracking the coding interview--Q1.2
题目
原文:
Write code to reverse a C-Style String. (C-String means that “abcd” is represented as five characters, including the null character.)
译文:
写代码翻转一个C风格的字符串。(C风格的意思是"abcd"需要用5个字符来表示,包含末尾的 结束字符)
解答
这道题如果就是要考察你有没有注意到C风格字符串最后的那个结束符,那我觉得还是像书 上写的那样,在代码中有所体现。代码如下:
void reverse(char *s) { char *end = s; char tmp; if(s) { while(*end) ++end; --end; while(s < end) { tmp = *s; *s++ = *end; *end-- = tmp; } } }
否则的话,可以直接获取字符串的长度,然后从两头开始一一交换相应的字符。代码如下:
void swap(char &a, char &b) { a = a^b; b = a^b; a = a^b; } void reverse2(char *s) { int n = strlen(s); for(int i=0; i < n/2; ++i) swap(s[i], s[n-i-1]); }
完整代码如下:
#include <iostream> #include <cstring> using namespace std; void swap(char &a, char &b) { a = a^b; b = a^b; a = a^b; } void reverse2(char *s) { int n = strlen(s); for(int i=0; i < n/2; ++i) swap(s[i], s[n-i-1]); } void reverse(char *s) { char *end = s; char tmp; if(s) { while(*end) ++end; --end; while(s < end) { tmp = *s; *s++ = *end; *end-- = tmp; } } } int main() { char s[] = "1234567890"; reverse2(s); cout << s << endl; return 0; }
比较简答的一种方式:
void reverse(char *s) { int n,tmp; while(s[n]!='\0') n++; for(int i=0;i<n/2;++i) { c=s[i]; s[i]=s[n-i-1]; s[n-i-1]=c; } }