题目:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
思路:
设反转前pos 位 字母 ,则如下图所示
#include<iostream>
#include<string>
using namespace std;
void Swap(string &str,int begin,int end)
{
while(begin<end)
{
swap(str[begin++],str[end--]);
}
}
string Reserve(string str ,int pos )
{
string result= str;
int FirstBegin = 0;
int FirstEnd = pos-1;
int SecondBegin = pos;
int SecondEnd = str.size()-1;
if(pos>0 && pos < str.size())
{
Swap(result,FirstBegin,FirstEnd);
Swap(result,SecondBegin,SecondEnd);
Swap(result,FirstBegin,SecondEnd);
}
return result;
}
int main()
{
string str = "abcdef";
cout<<Reserve(str,2)<<endl;
system("pause");
return 0;
}