学了一下n=strlen(s),s[(p+i)%n]
这个遍历环形串的写法
AC的代码
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
//判断p和q的字典序
int les(char s[],int p,int q){
int n=strlen(s);
for(int i=0;i<n;i++){
//很棒的一个环形写法 s[(p+i)%n],简洁的输出环形串
if(s[(p+i)%n]!=s[(q+i)%n]) return s[(p+i)%n]<s[(q+i)%n];
}
return 0;
}
int main(){
int t;
char s[N];
cin>>t;
while(t--){
cin>>s;
int ans=0;
int n=strlen(s);
for(int i=1;i<n;i++){
//如果i法字典序小于ans,更新ans
if(les(s,i,ans)) ans=i;
}
for(int i=0;i<n;i++){
putchar(s[(i+ans)%n]);
}
puts("");
}
return 0;
}