字串左旋--迴圈移位法(c++實現)
阿新 • • 發佈:2019-01-25
#include<iostream>
#include<string>
using namespace std;
//求最大公倍數gcd演算法
int gcd(int a,int b)
{
int c;
while(b>0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
//旋轉演算法 void my_rotate(string &str,int m) { int len=str.length(); int num=gcd(len,m); int elem=len/num; int i,j; for(j=0;j<num;j++) { char tmp=str[j]; for(i=0;i<elem-1;i++) str[(j+i*m)%len]=str[(j+(i+1)*m)%len]; str[(j+i*m)%len]=tmp; } } int main() { string s="abcdefghijk"; my_rotate(s,3); cout<<ch<<endl; return 0; }
看了很久總算看明白這個演算法了,主要用到的是gcd(歐幾里得演算法)、迴圈移位演算法,比較難理解。