思路:先分别内部旋转两部分,然后整体旋转字符串
代码如下:
#include "stdafx.h"
#include <iostream>
using namespace std;
//翻转字符串pBegin和pEnd分别指向字符串的首尾字符
void Reverse(char *pBegin, char *pEnd)
{
if (pBegin == NULL || pEnd == NULL)
{
return;
}
while (pBegin < pEnd)
{
char pTemp = *pBegin;
*pBegin = *pEnd;
*pEnd = pTemp;
pBegin++;
pEnd--;
}
}
//将字符串str的左边num个字符左旋至字符串的尾部
void LeftRotateString(char *str, int num)
{
if (str == NULL || num < 0)
{
return;
}
int nLength = strlen(str);
char *pFirstBegin = str;
char *pFirstEnd = str + num -1;
char *pSecondBegin = pFirstEnd + 1;
char *pSecondEnd = str + nLength -1;
if (num >= 0 && num <nLength)
{
Reverse(pFirstBegin, pFirstEnd);
Reverse(pSecondBegin, pSecondEnd);
Reverse(pFirstBegin, pSecondEnd);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
//char *str = "abcdefg"; //注意不能使用这种方式表示
char str[] = "abcdefg";
LeftRotateString(str, 2);
cout << str << endl;
system("pause");
return 0;
}
运行结果: