字符串循环移位

时间:2023-01-03 21:31:03
// strMove1.cpp : Defines the entry point for the console application.
//
//时间复杂度O(L),空间复杂度O(1)
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
void moveOneStep(char a[]);
void moveN(char a[],int n);
int main(int argc, char* argv[])
{
char a[10];
gets(a);
int n=4;
// cin>>n;
moveN(a,n);

printf("%s",a);
return 0;
}

//将字符串分成AB两部分,前L-n个字符视为字符串A,后n个字符视为字符串B。移位后位BA。
//BA=B''A''=(A'B')',B'位B的反序字符串
void reverseOrder(char str[],int p,int q)
{
char temp;
while(p<q)
{
temp=str[p];
str[p]=str[q];
str[q]=temp;
p++;
q--;
}
}
//
void moveN(char a[],int n)
{
if(!a)
return;
int len=strlen(a);
int t=n%len;
reverseOrder(a,0,len-t-1);
reverseOrder(a,len-t,len-1);
reverseOrder(a,0,len-1);
}