原题链接:验证子串
解题思路:
注意事项:
参考代码:
第一种强行解题,硬解:
#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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复