zoukankan      html  css  js  c++  java
  • 字符串面试题系列之一:翻转字符串顺序

    前言

        从今天开始,本程序员开始专注写自己的博客了。之前我收集到了不少好的文章,无论从cnblog上面还是csdn上面。我从中受益匪浅。我觉得知识属于大家的,我也应该贡献自己的思路。那么首先从最简单的算法开始。 我打算从字符串算法开始,因为字符串处理是我们编程当中经常会遇到的,比如求子串,逆转字符串等等。好了,废话不多说了。下面开始进入正题。

        本系列文章均系笔者所写,难免有一些错误或者纰漏,如果小伙伴们有好的建议或者更好的算法,请不吝赐教。

    正文

    【题目】

       输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。

    【例子】

       输入“I am a student.”,则输出“student. a am I”。

    【分析】

       对于一个英文句子,大家都知道是用空格分隔开的。那么如何翻转英文句子而保持里面单词顺序不变呢?当然我们可以开辟一个新的空间,然后对源字符串从后面开始扫描,遇到空格停止,将子串复制到目标空间中。这是我们直观思维。那么这样需要开辟一个新的空间,空间效率应该是O(n)。那么我们在想一想,首先我们将整个字符串翻转,再将各个子串再翻转(子串以空格分开)。这样是不是就达到目的了呢。就拿上面那个例子来说。整个字符串翻转之后我们得到".tneduts a ma I", 再对子串翻转,我们得到"student. a am I"。这就是我们得到的结果。代码如下:

    【代码】

    #include <iostream>
    #include <cstring>
    void word_reverse( char * const word, int start, int end )
    {
       char ch;
       while( start < end )
       {
          ch = word[start];
          word[start] = word[end];
          word[end] = ch;
          start++;
          end--;
       }
    }
    
    char * setence_reverse( char * const setence, int length )
    {
       int end = 0;
       word_reverse( setence, 0, length - 1 );
       for( int start = 0; start < length; start += end + 1 )
       {
          for( end = start; end < length && setence[end] != ' '; end++ );
          word_reverse( setence, start, end-1 );
       }
       return setence;
    }
    
    int main( int argc, char ** argv )
    {
       char data[] = "I am a students.";
       char * pResult = setence_reverse( data, strlen(data) );
       std::cout << pResult << std::endl;
       return 0;
    }

    【结论】

       我们输入I am a students. 输出如下:
    5

    作者

       出处:http://www.cnblogs.com/gina

       本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Using the proxy page
    ArcGIS 帮助 10.1 几何服务
    【转】地图投影系列介绍(三)_ 地图投影
    最简单的闰年函数
    JSP的编码问题
    和苗波玩吉他英雄,还有诺拉斯战士
    倒底是用接口,还是继承类?
    收集的两个Winform三层结构的例子
    在vs.net 2005 中 像JBuilder,Eclipse那样格式化代码
    JSP比ASP好的几个地方
  • 原文地址:https://www.cnblogs.com/gina/p/3246713.html
Copyright © 2011-2022 走看看