解题思路:

注意事项:

参考代码:


第一种强行解题,硬解:

#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 人评分

  评论区

  • «
  • »