zoukankan      html  css  js  c++  java
  • 【面试题总结】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 == '')
     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 == '')                            // 为了处理"             "这种情况
    24         return;
    25     
    26     r = p;
    27     q = p + 1;
    28 
    29     while (*q != '')
    30     {
    31         if ((*p >= 'a' && *p <= 'z') && (*q == ' '))
    32         {
    33             reserverOneWord(r, p);        // 反转 r到p这部分
    34             
    35             while (*q == ' ')
    36                 ++q;
    37             if (*q == '')                        // 为了处理"  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指向 ,需要反转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】:

    题目:

    (未完待续...)

  • 相关阅读:
    maven实现打包带源代码的jar包
    maven实现打包带源代码的jar包
    maven实现打包带源代码的jar包
    Java奇淫巧技之Lombok
    Java奇淫巧技之Lombok
    Java奇淫巧技之Lombok
    基于移动Web的视图引擎实现
    AE错误代码解释
    Visual Studio q启动卡顿
    RabbitMQ安装后,BADARG问题
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/10987249.html
Copyright © 2011-2022 走看看