博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C语言反转字符串

Posted on 2014-09-04 15:50  猫少侠  阅读(683)  评论(0编辑  收藏  举报

  也是面腾讯的一道编程题=,=

  这题比较简单

 

代码如下:

 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#