反转字符串:

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

【形式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】:

题目:

(未完待续...)

转载于:https://www.cnblogs.com/xuelisheng/p/10987249.html

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

  1. 在JavaScript中反转字符串的三种方法

    This article is based on Free Code Camp Basic Algorithm Scripting "Reverse a String" 本文基于F ...

  2. 反转字符串java实现_反转字符串的几种实现(Java)

    反转字符串的几种实现(Java) 首先第一种是利用Java中的类库对象进行反转 //第一种 使用Java类库的diam实现反转 public String reverse(String str){ S ...

  3. python3反转字符串的3种方法

    前段时间看到letcode上的元音字母字符串反转的题目,今天来研究一下字符串反转的内容.主要有三种方法: 1.切片法(最简洁的一种) #切片法 def reverse1():s=input(" ...

  4. 反转字符串的四种方法

    1.使用StringBuffer自带的方法实现 public String reverse1(String str) {if(str == null || str.length()<=1){re ...

  5. Python 中的反转字符串:reversed()、切片等

    摘要:以相反的顺序反转和处理字符串可能是编程中的一项常见任务.Python 提供了一组工具和技术,可以帮助您快速有效地执行字符串反转. 本文分享自华为云社区<Python 中的反转字符串:rev ...

  6. java反转字符串的方法

    1.首先我们定义一个方法,用来反转字符串.用 public static void (String)方法初始化一个对象,然后使用 private static ()方法对该对象进行初始化,并检查是否有 ...

  7. 在JavaScript中重复字符串的三种方法

    In this article, I'll explain how to solve freeCodeCamp's "Repeat a string repeat a string" ...

  8. python面试题(4)--- 字符串首字母大小写 和 反转字符串 问题

    1.修改字符串首字母的大小写 代码演示: s1 = 'hello' print(s1) print(s1.capitalize())#s1[0] = 'H' 只读的,会抛出异常s1 = s1[0:1] ...

  9. 字符串反转python 测试_Python中的反转字符串问题

    按单词反转字符串是一道很常见的面试题.在Python中实现起来非常简单. def reverse_string_by_word(s): lst = s.split() # split by blank ...

最新文章

  1. 6月17 表单验证
  2. 目标检测(Object Detection)原理与实现
  3. 笔记-高项案例题-2016年下-计算题
  4. Android Studio相关资料链接
  5. 二进制状态压缩相关操作
  6. 这名程序员28岁就退休了。。。
  7. Nexus:一站式私有仓库管理(NuGet、Maven、npm、Docker)
  8. LNCS用户写作指南【 Springer Computer Science Proceedings 】
  9. Centos6.6部署Redis集群
  10. win10下的用交叉线实现文件共享
  11. 在线多空行只保留一个工具
  12. php post请求超时,php用curl提交post数据,本地测试服务器OK,线上超时,需要如何排除问题?...
  13. 步骤五 · 4-9 解决getElementsByClassName()兼容性 未解决
  14. 数学建模13种常见方法
  15. mysql execute stmt_mysql_stmt_execute()--MySql数据库
  16. 分享一下自己收集到的真实用户的UA
  17. linux终端下载速度只有几kb,[菜鸟教学]如何提高linux下的下载速度!新手必看!...
  18. 群同态和群同构的区别_抽象代数3-1群同态的简单性质与低阶群的结构
  19. 新买的笔记本电脑分区,笔记本分区分错了怎么重新分
  20. Technorati Blog Finder BETA

热门文章

  1. 计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图
  2. python 之遍历目录树(可匹配输出特定后缀的文件)
  3. SQL server 2008 不允许保存更改,您所做的更改要求删除并重新创建以下表 的解决办法...
  4. NET框架下使用双缓冲技术绘图
  5. 【Java从0到架构师】Maven
  6. Manjaro_xfce 安装后配置
  7. FineReport层式报表解决大数据集展示问题攻略
  8. cass读取dat文件_CASS里DTM法土方计算
  9. matlab怎么复制相同的列,怎样将数组中某一列数据相同的行提取出来?
  10. pythondjango项目集成_Django集成celery实战小项目