coder_new

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
//左旋转字符串
#include <iostream>
using namespace std;

//一位位移动
void shiftLeftOne(char *str)
{
    int len=strlen(str);

    char temp=str[0];

    for(int i=1;i<len;i++) {
        str[i-1]=str[i];
    }

    str[len-1]=temp;
}

char *shiftLeft(char *str,int n)
{
    int len=strlen(str);

    n=n%len;

    while(n--) {
        shiftLeftOne(str);
    }

    return str;
}

//三步反转
void inverse(char *str,int head,int tail)
{
    while(head<tail) {
        char temp;
        temp=str[head];
        str[head]=str[tail];
        str[tail]=temp;

        head++;
        tail--;
    }
}

char *shiftLeftThreeStep(char *str,int n)
{
    int len=strlen(str);

    n=n%len;

    inverse(str,0,n-1);
    inverse(str,n,len-1);
    inverse(str,0,len-1);

    return str;
}

int main()
{
    char str[]="abcd";

    cout<<shiftLeft(str,4)<<"\n";

    cout<<shiftLeftThreeStep(str,6)<<"\n";
}

 

posted on 2014-03-13 15:48  coder_new  阅读(186)  评论(0编辑  收藏  举报