上一遍介绍了左旋字符串的第一种方法,暴力移位法。今天我们通过指针翻转法来实现左旋字符串。下面看一个例子。字符串“abcdefghijk”通过左移得到"defghijkabc"。我们可以通过两步来实现。首先定义两个指针p1,p2指向要交换的两个字符,如p1指向a,p2指向d,将p1与p2指向的字符进行交换,然后p1++,p2++。这样反复重复,知道p2指向末尾的字符。这样可以得到字符串defghijkcab。剩下的就是处理尾巴。此时我们可以知道p1指向c,p2指向b,将ab向左移动两个单位既可以得到的字符串。
下面是代码实现:
#include "stdafx.h"
#include"string"
#include"iostream"
using namespace std;
void rotate(string &str,int m)
{
//例如"abcdefghijk",其中n=11,m=3
//做简单的初始化工作
int n=str.length();
int p1=0;
int p2=m;
//p2指到最后,操作完之后变为defghijkcab
while(true)
{
swap(str[p1],str[p2]);
p1++;
if(p2<n-1)