m0_73292724 2022-08-21 20:07 采纳率: 91.7%
浏览 68
已结题

请问代码错在哪里,样例成功通过

请问代码错在哪里,样例成功通过,就是代码不通过,不要直接给代码

问题遇到的现象和发生背景

字符串移位包含问题
描述
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串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;    
} 

  • 写回答

1条回答 默认 最新

  • 滴水不穿石 2022-08-21 21:29
    关注

    写的太复杂了啊。
    为啥不用简单的呢?

    img

    img

    img

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        char s0[61],s1[31];
        size_t len0,len1;
        scanf("%30s%30s",s0,s1);
        len0=strlen(s0);
        len1=strlen(s1);
        if(len0<len1)
        {
            return -1;        
        }
        
        memcpy(s0+len0,s0,len0+1);
        
        strstr(s0,s1)!=NULL ? puts("true"):puts("false");
            
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存