计蒜客T1117,求改正代码

计蒜客T1117,字符串移位包含问题
#include <bits/stdc++.h>
using namespace std;
//循环移位
void flash(char* x)
{
    char t = x[0];
    int len = strlen(x);
    for (int i = 0; i < len; i++)
    {
        x[i] = x[i + 1];
    }
    x[len - 1] = t;    
}
//判断子串
int comparison(char* a, char* b)
{
    int flag = 0;
    int ans = 0;
    for (int i = 0; i < strlen(a); i++)
    {
        for (int j = 0; j < strlen(b); j++)
        {
            if (a[i] == b[j])
            {
                flag += 1;
            }
        }
        while (i == strlen(a) - 1)
        {
            if (flag == strlen(b))
            {
                ans = 1;
            }
            else if (flag == strlen(a))
            {
                ans = 2;
            }
            else ans = 3;
            break;
        }
    }
    return ans;
}
int main()
{
    char a[32], b[32];
    cin >> a >> b;
    int flag = 0;
    for (int i = 0; i < strlen(a); i++)
    {
        flash(a);
        for(int j=0;j<strlen(b);j++)
        {
            while(j != 0)
            {
                flash(b);
            }
            flag = comparison(a, b);
            if (flag == 0 && flag != 3)
            {
                 continue;
            }
            else{
                cout << "true";
                return 0;
            } 
        }  
    }
    cout << "false";
    return 0;
}

达不成false判定,不知道哪里逻辑出了错

你判断子串的函数不对
参考

计蒜客 信息学题库 T1117 字符串移位包含问题_WLHSDXN的博客-CSDN博客 T1117 字符串移位包含问题对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。给定两个字符串 s1和 s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。输入格式一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过 30。输出格式如果一个字符串是另一字符串通过若干 https://blog.csdn.net/WLHSDXN/article/details/107606671

你的代码错误很多,更改如下

#include <bits/stdc++.h>
using namespace std;
//循环移位
void flash(char *x)
{
    char t = x[0];
    int len = strlen(x);
    for (int i = 0; i < len-1; i++)
    {
        x[i] = x[i + 1];
    }
    x[len - 1] = t;
}
//判断子串
int comparison(char *p, char *q)
{
    int flag;
    for (int i = 0; i < strlen(p); i++)
    {
        flag = 0;
        for (int j = 0; j < strlen(q); j++)
        {
            if (p[i+j] == q[j])
            {
                flag += 1;
            }
            else
                break;
        }
        if (flag == strlen(q))
            return 1;
    }
    return 0;
}
int main()
{
    char a[32], b[32];
    char *p, *q;
    cin >> a >> b;
    p = a;
    q = b;
    if (strlen(a) < strlen(b))
    {
        p = b;
        q = a;
    }
    for (int j = 0; j < strlen(p); j++)
    {
        if (j != 0)
        {
            flash(p);
        }
        if (comparison(p, q))
        {
            cout << "true";
            return 0;
        }
    }
    cout << "false";
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img