题目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; } } */