码迷,mamicode.com
首页 > 其他好文 > 详细

【面试题总结】2、反转字符串的几种形式

时间:2019-06-07 00:34:55      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:char s   字符   一个   std   nbsp   return   des   word   inf   

反转字符串:

作为面试题出现频率最高的手写代码题,有必要做一下总结。

【形式1】:

题目:

/*
反转字符串-1:
orgin = "where‘d you go?"
dest = "?og uoy d‘erehw"
*/

分析:很容易的题目。解决方法有2种:可以递归输出、也可以“头尾”指针向中间移动,边移动变交换。

代码实现:(vs2017下测试通过)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void reserve01(char *origin)
 5 {
 6     if (*origin == \0)
 7     {
 8         return;    
 9     }
10     else 
11     {
12         reserve01(origin + 1);
13         cout << *origin ;
14     }
15 }
16 
17 void reserve02(char origin[], int length)
18 {
19     char *head = origin;
20     char *tail = origin + length - 1;
21     while (head != tail)
22     {
23         char temp = *head;
24         *head = *tail;
25         *tail = temp;
26         head ++;
27         tail--;
28     }
29 }
30 
31 int main()
32 {
33     char origin[] = "where‘d you go?";
34 
35     // 方法1:采用递归的方式直接输出
36     reserve01(origin);
37     cout << endl;
38 
39     // 方法2:在origin上直接逆置
40     reserve02(origin, 15);
41 
42     // 输出方法2的返回值
43     cout << origin << endl;
44 
45     system("pause");
46     return 0;
47 }

 

 

【形式2】:

题目:

/*
反转字符串-2:
orgin = "where‘d you go?"
dest = "d‘erehw uoy ?og"
*/

分析过程:如图所示,

技术图片

代码实现:(vs2017下测试通过)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void reserverOneWord(char *r, char *p)
 5 {
 6     while (r < p)
 7     {
 8         char temp = *r;
 9         *r = *p;
10         *p = temp;
11         r++;
12         --p;
13     }
14 }
15 
16 void reserverString(char *str)
17 {
18     char *p, *q, *r;
19 
20     p = str;
21     while (*p ==  )                        // 让 p r指向第一个非空格的字符,为了处理“  hello world”这种情况
22         ++p;
23     if (*p == \0)                            // 为了处理"             "这种情况
24         return;
25     
26     r = p;
27     q = p + 1;
28 
29     while (*q != \0)
30     {
31         if ((*p >= a && *p <= z) && (*q ==  ))
32         {
33             reserverOneWord(r, p);        // 反转 r到p这部分
34             
35             while (*q ==  )
36                 ++q;
37             if (*q == \0)                        // 为了处理"  hello world                   "这种情况
38                 return;
39             r = q;
40             p = q;
41             q++;
42         }
43         else
44         {
45             ++q;
46             ++p;
47         }
48     }
49     reserverOneWord(r, p);            // 此时q指向 \0,需要反转r到p位置的字符串
50 }
51 
52 int main()
53 {
54     // 测试用例
55     // char str[] = "where‘d go?";
56     //char str[] = "hello world!";
57     //char str[] = "  hello world                       ";
58     char str[] = "      ";
59 
60     reserverString(str);
61     cout << str;
62 
63     system("pause");
64     return 0;
65 }

【形式3】:

题目:

(未完待续...)

 

 

 

【面试题总结】2、反转字符串的几种形式

标签:char s   字符   一个   std   nbsp   return   des   word   inf   

原文地址:https://www.cnblogs.com/xuelisheng/p/10987249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!