解题思路:
本题是要给定两个字符串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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复