解题思路:

本题是要给定两个字符串arr1和arr2,判断arr1经过任意次循环操作之后,是否包含arr2的子字符串。由于循环操作是将字符串最后一位字符转移到第一位,所以通过有限次循环之后,arr1字符串会转变为最初的字符串,所以可以先将arr1字符串先首尾相连形成一个新的字符串,长度为2 * strlen( arr1 ),所有循环操作之后得到的字符串均为该字符串的子字符串,只需要判断arr2是否为新字符串子字符串即可。

注意事项:

在连接字符串时,string.h库函数包含了strcat具有连接字符串的功能,但由于其特殊属性不能连接字符串自身,所以需要自己通过循环操作实现,然后用strstr函数判断即可。

参考代码:

#include<stdio.h>

#include<string.h>


int main()

{

    char ch[200000] = { 0 };

    char ch1[100000] = { 0 };


    scanf("%s %s", ch, ch1);


    //实现将一个一样的字符串连接在给定字符串之后

    int len = strlen(ch);

    int i = 0;

    for (i = 0; i < len; i++)

    {

        ch[len + i] = ch[i];

    }

    ch[2 * len] = '\0';


    //判断ch1数组是否为ch字符串的子串

    char* p = strstr(ch, ch1);


    if (p == NULL)

    {

        printf("false\n");

    }

    else

    {

        printf("true\n");

    }


    return 0;

}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论