剑指offer面试题[42]-反转单词顺序VS左旋转字符串

来源:互联网 发布:软件开发员 编辑:程序博客网 时间:2024/05/16 01:38

题目1:

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

class Solution {public:    string LeftRotateString(string str, int n) {        int len=str.length();        if(len<=0||n<=0)            return str;       //假设输入str为abcXYZdef,n=3            Reverse(str,0,n-1);   //反转前n个字符,得到cbaXYZdef        Reverse(str,n,len-1); //反转第n个字符后面所有的字符cbafedZYX        Reverse(str,0,len-1); //反转整个字符串XYZdefabc        return str;    }   void Reverse(string &str,int begin,int end)    {        int temp;        while(begin<end)         {            temp=str[begin];            str[begin]=str[end];            str[end]=temp;                        begin++,end--;         }    }};
题目2:
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I 
输入描述:
每个测试输入包含1个测试用例:  I like  beijing. 输入用例长度不超过100
输出描述:
依次输出倒置之后的字符串,以空格分割
示例1

输入

I like beijing.

输出

beijing. like I
#include<iostream> #include<string> #include<vector> using namespace std; void Reverse(string &str,int begin,int end){   int temp;   while(begin<end)    {       temp=str[begin];       str[begin]=str[end];       str[end]=temp;              begin++,end--;    }}int main(){  string str;   while(getline(cin,str))    {       int len=str.length();       Reverse(str,0,len-1);       int p1=0,p2=0;       while(p2<len)         {            while(str[p2]!='\0'&&str[p2]!=' ')                p2++;            Reverse(str,p1,p2-1);                       p2++;            p1=p2;         }       for(int i=0;i<len;i++)         {                cout<<str[i];         }    }}/*int main() {    string str;    while(getline(cin,str))     {        int length=str.length();        string temp;        vector<string> vec;        for(int i=0;i<length;i++)         {             if(str[i]!=' ')                 temp.push_back(str[i]);             else               {                 vec.push_back(temp);                 temp.clear();            //这里一定要清除               }         }        vec.push_back(temp);        //需要把最后一个单词压入到vec中        for(int j=vec.size()-1;j>0;j--)  //倒序输出            cout<<vec[j]<<' ';        cout<<vec[0]<<endl;     }}*/

阅读全文
0 0
原创粉丝点击