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

Posted xuelisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题总结2反转字符串的几种形式相关的知识,希望对你有一定的参考价值。

反转字符串:

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

【形式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反转字符串的几种形式的主要内容,如果未能解决你的问题,请参考以下文章

面试题:反转字符串(leetcode344)

python 字符串反转的几种方法

Spring 创建Bean的几种形式

1.Python实现字符串反转的几种方法

Java常考面试题总结

面试题总结