剑指offer--之翻转字符串

来源:互联网 发布:淘宝怎么找团队 编辑:程序博客网 时间:2024/06/16 23:28

遇到这样的一道题是说:输入的是一个英文的句子,要求翻转句子中的单词的顺序,但是单词内的字符的顺序却不能变。例如:输入“I am a student.”输出的则是“student.am I”。
解题思路:
遇到这样的问题,我们一般都是通过翻转来实现的。也就是第一步翻转是把字符串里面所有的字符进行翻转,也就是字符串的逆置。然后再把每个单词里面字符的顺序进行翻转,这样的话我们就可以改变单词的顺序而不改变每个单词字符的顺序。
第一次翻转:
第一次翻转也就是字符串的逆置,这就很简单。用两个指针,一个指针指向字符串的开始,后一个指针指向字符串后面’\0’的前面的位置,这样通过第三个变量就可以完成字符串的替换。
第二次翻转:
第二次翻转的目的是对第一次翻转结果中每一个字符串单词里字符的翻转。我们知道每个单词之间都隔着一个空格,这样我们遇到一个空格表示是一个单词这样进行翻转就可以了。
代码如下:

#include<iostream>using namespace std;char* reverse(char* pbegin,char* pend){    if(pbegin == NULL || pend == NULL)        return NULL;    while(pbegin < pend)    {        char tmp = *pbegin;        *pbegin = *pend;        *pend = tmp;        pbegin++;        pend--;    }}char* reverse_sentence(char* str){    if(str == NULL)        return NULL;    char* begin = str;    char* end = str;    while(*end != '\0')    {        end++;    }    end--;                  //最后一次会走到'\0'的后面    reverse(begin,end);     //翻转整个字符串    begin = end = str;      //连个指针都从字符串开始处走    while(*begin != '\0')    {        if(*begin == ' ')        {            begin++;            end++;        }        else if(*end == ' '|| *end == '\0')        {            reverse(begin,--end);            begin = ++end;        }        else        {            end++;        }    }    return str;}int main(){    char str[] = "I am a student.";    cout<<reverse_sentence(str)<<" "<<endl;    return 0;}

除了上面这种方法还有一种更加高效、简便的方法:
代码:

#include <iostream>  #include <string>  using namespace std;  void reverseword(char *p)  {      if (!p||!*p)      {          return ;      }      string s;      while(*p!=' '&&*p!='\0')      {          s+=*(p++);      }      if (*p)      {          reverseword(p+1);      }      cout<<s<<" ";  }  int main()  {      char a[]="I am a student.";      reverseword(a);      return 0;  }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕期间脚扭了怎么办 买了临街房后悔怎么办 绝地求生困在废车里怎么办 身体出现辅助睡眠状态怎么办 扁桃体发炎喉咙痒咳嗽怎么办 电脑玩英雄杀卡怎么办 康佳冰箱显示2e怎么办 高考登陆系统登录密码错误怎么办 苹果遇到ad登录问题怎么办? 小孩2天不拉屎怎么办 20天宝宝不大便怎么办 小孩几天不拉大便怎么办 宝宝经常不拉大便怎么办 宝宝便秘 肛裂了怎么办 3个月宝宝不便便怎么办 宝宝8个月不便便怎么办 宝宝在幼儿园不爱说话怎么办 广东学考考了d怎么办 上嘴唇干燥紧绷怎么办 美国大学gpa非常低怎么办 大学手机作弊通报教务处怎么办 崩坏3邮箱验证码过期怎么办 快递员被顾客恶意投诉怎么办 5岁幼儿逻辑思维差怎么办 脸一边胖一边瘦怎么办 夏天穿鞋子脚痒怎么办 脚痒怎么办但不是脚气 脚气脚趾缝烂了怎么办 凉鞋穿久了臭怎么办 运动鞋穿久了臭怎么办 体恤穿久了发臭怎么办 十七八岁青少年逆反心理怎么办 挨刚煮好的粥烫伤改怎么办? 5e的demo有水印怎么办 宝宝湿疹激素一停药复发怎么办 木工家装没事做怎么办 取票之后票丢了怎么办 补牙咬合低了点怎么办 留学生上美国网课上不了网怎么办 大四绩点不够2.0怎么办 ucas申请成绩下来后怎么办