原题链接:验证子串
解题思路:
注意事项:
参考代码:
第一种强行解题,硬解:
#include<stdio.h>
#include<string.h>
int main()
{
char a[200];
char b[200];
scanf("%s%s",a,b);
int len_a=strlen(a);
int len_b=strlen(b);
int count=0,k=0;//用k区分三种结果
if(len_a>len_b)
{
for(int i=0;i<len_a;i++)
{
count=0;//用于在每次开始比较新的字符之前将 count 的值重置为 0。这样可以确保每次比较都从子串的起始位置开始
while(a[i]==b[count]&&count<len_b)//这里别忘了对count做限制,要小于len_b
{
i++;
count++;
}
if(count==len_b)
{
k=1;
}
}
}
else
{
for(int i=0;i<len_b;i++)
{
count=0;
while(b[i]==a[count]&&count<len_a)
{
i++;
count++;
}
if(count==len_a)
{
k=2;
}
}
}
if(k==1)
{
printf("%s is substring of %s",b,a);
}
else if(k==2)
{
printf("%s is substring of %s",a,b);
}
else
{
printf("No substring");
}
return 0;
}第二种使用库函数strstr(),用于在一个字符串中查找另一个字符串的第一次出现的位置,对函数做些解释:
函数原型:
char *strstr(const char *haystack,const char *needle);//简单来说,第二个参数为第一个参数的子字符串
函数参数:
haystack:要在其中查找的字符串
needle: 要查找的子字符串
函数返回值:
如果子字符串needle 在字符串haystack 中找到,则返回第一次出现的位置的指针
如果子字符串needle 未在字符串haystack 中找到,则返回NULL
代码:
#include<stdio.h>
#include<string.h>
int main()
{
char a[200],b[200];
scanf("%s%s",a,b);
int len_a=strlen(a);
int len_b=strlen(b);
char *result;
int k=0;
if(strstr(a,b)!=NULL)
{
result=strstr(a,b);//这句话还有下面的一样的,都是多余的,因为我本来想通过指针递增输出子字符串,发现太麻烦了,就算了
k=1;
}
else if(strstr(b,a)!=NULL)
{
result=strstr(b,a);
k=2;
}
else
{
printf("No substring");
}
if(k==1)
{
printf("%s is substring of %s",b,a);
}
else if(k==2)
{
printf("%s is substring of %s",a,b);
}
return 0;
}0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复