请问代码错在哪里,样例成功通过,就是代码不通过,不要直接给代码
问题遇到的现象和发生背景
字符串移位包含问题
描述
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
输入
一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30。
输出
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。
样例输入
AABCD CDAA
样例输出
true
问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <string.h>
int main()
{
char s1[35]={0},s2[35]={0};
scanf("%s %s",s1,s2);
int la=strlen(s1),lb=strlen(s2),i,j,count=0,flag=0,sum=0;
if(lb<la){//确保以s1作为较小的子字符串
int t;
for(i=0;i<la;i++){
t=s1[i];
s1[i]=s2[i];
s2[i]=t;
}
// printf("%s %s",s1,s2);
int t2=la;
la=lb;
lb=t2;
}
i=j=0;
for(;i<=lb;i=(i+1)%lb){
for(;j<=la;j=(j+1)%la){
sum++;
if(s1[j]==s2[i]){//逐个字匹配
int p=i,q=j;count=0;
while(s1[q]==s2[p]){
p=(p+1)%lb;
q=(q+1)%la;
count++;
if(count==la){//与s1完全相同的s2部分满足s1长度
printf("true");
flag=1;
break;
}
}
}
if(flag==1){
break;
}
if(sum>la*lb){//当内外循环一遍后,跳出
printf("false");
flag=2;
break;
}
if(sum%4==0){
j=(j+1)%la;
break;
}
}
if(flag==1||flag==2){
break;
}
}
return 0;
}