解题思路:
注意事项:
参考代码:
第一种强行解题,硬解:
#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语言程序设计教程(第三版)课后习题9.3 (C++代码)浏览:702 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:588 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:569 |
买不到的数目 (C++代码)浏览:909 |
小明A+B (C语言代码)浏览:1317 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:633 |
WU-整除问题 (C++代码)浏览:648 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:943 |
【计算球体积】 (C语言代码)浏览:1158 |