#include<iostream>
#include<string>
using namespace std;
void LeftShiftOne(string &s, int n)
{
<span style="white-space:pre"> </span>char t = s[0]; //保存第一个字符
<span style="white-space:pre"> </span>for (int i = 1; i < n; i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>s[i - 1] = s[i];
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>s[n - 1] = t;
}
void LeftRotateString(string &s, int n, int m)
{
<span style="white-space:pre"> </span>while (m--)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>LeftShiftOne(s, n);
<span style="white-space:pre"> </span>}
}
int main()
{
<span style="white-space:pre"> </span>string s = "abcdefg";
<span style="white-space:pre"> </span>LeftRotateString(s, s.size(), 3);
<span style="white-space:pre"> </span>cout << s << endl;
<span style="white-space:pre"> </span>system("pause");
<span style="white-space:pre"> </span>return 0;
}
另一种解法
#include<iostream>
#include<string>
using namespace std;
void reverse(string &s, int from, int to)
{
while (from < to)
{
int t = s[from];
s[from++] = s[to];
s[to--] = t;
}
}
void shift(string &s, int n, int m)
{
m = m % n;
reverse(s,0,m-1);
reverse(s, m, n - 1);
reverse(s, 0, n - 1);
}
int main()
{
string s = "abcdefg";
//cout << s << endl;
//cout << strlen(s) << endl;
shift(s, s.size(), 3);
cout << s << endl;
system("pause");
return 0;
}