也是面腾讯的一道编程题=,=
这题比较简单
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 4 // 非递归实现字符串反转 5 char *reverse_v1(char *str) 6 { 7 if( !str ) 8 { 9 return NULL; 10 } 11 12 int len = strlen(str); 13 char temp; 14 for( int i = 0; i < len / 2; i++ ) 15 { 16 // 交换前后两个相应位置的字符 17 temp = *(str + i); 18 *(str + i) = *(str + len - 1 - i); 19 *(str + len - 1 - i) = temp; 20 } 21 22 return str; 23 } 24 25 // 非递归实现字符串反转 26 char *reverse_v2(char *str) { 27 if( !str ) 28 return NULL; 29 30 int len = strlen(str); 31 int i, j; 32 char temp; 33 for( i = 0,j= len-1; i < j; i++, j--) { 34 // 交换前后两个相应位置的字符 35 temp=str[i]; 36 str[i]=str[j]; 37 str[j]=temp; 38 } 39 40 return str; 41 } 42 43 // 递归实现字符串反转 44 void reverse(char *str, int n) 45 { 46 if( !str ) 47 return ; 48 49 if (1 == n || 0 == n) { 50 return; 51 } else { 52 char tmp = str[0]; 53 str[0] = str[n-1]; 54 str[n-1] = tmp; 55 reverse(str+1, n-2); 56 } 57 58 } 59 60 61 62 int main() { 63 // 不能用 char *str = "help";这种,因为这种情况下的"help"是个字符常量,"help"存放于常量区 64 // 参考&拓展:http://www.cnblogs.com/lingshaohu/p/3956239.html 65 char str[] = "help"; 66 67 //char *dst = reverse_v1(str); 68 //char *dst = reverse_v2(str); 69 //printf("%s\n", dst); 70 71 reverse(str, strlen(str)); 72 73 printf("%s\n", str); 74 75 return 0; 76 }
ref:http://blog.csdn.net/ameyume/article/details/5599139#
弦上故人来,纸底乱飞红。