《编程思维与实践》1046.字串间距

《编程思维与实践》1046.字串间距

题目

在这里插入图片描述

思路

通过字符串的搜索,找到第一次出现的位置和最后一次出现的位置,然后进行分类讨论,最后比较得到最大间距.

第一次出现可以直接调用strstr函数,而最后一次出现需要使用strrstr函数(string.h里不包含),可通过反复调用strstr函数来实现.

找到s1,s2第一次和最后一次出现的位置,两两进行运算有四种可能情况,再讨论s1在前还是s2在前(因为间距必须为正数),

最后比较得到最大间距.

代码

#include<stdio.h>
#include<string.h>

char *strrstr(char *dest,char* src)   //dest 目标  src search 搜索 
{
    
    
	if(strstr(dest,src)!=NULL)
	{
    
    
		dest=strstr(dest,src)+strlen(src);   //加上长度后从后面开始接着搜
		strrstr(dest,src);	    //反复调用直到找不到字符串
	} 
	else
	{
    
    
		return dest-strlen(src);   //返回头指针 所以需要减去长度
	}
}

int main()
{
    
    
	int T;
	scanf("%d",&T);
	for(int t=0;t<T;t++)
	{
    
    
		char s1[81],s2[81],s[81];
		scanf("%s",s1);
		scanf("%s",s2);
		scanf("%s",s);
		printf("case #%d:\n",t);
        if(strstr(s,s1)==NULL||strstr(s,s2)==NULL)
        {
    
    
            printf("0\n");
        }
		else
        {
    
    
            int d[4];              
            d[0]=strstr(s,s1)-strstr(s,s2)>0?strstr(s,s1)-strstr(s,s2)-strlen(s2):strstr(s,s2)-strstr(s,s1)-strlen(s1);    //>0表明s2在前,需要减掉s2长度
            d[1]=strrstr(s,s1)-strstr(s,s2)>0?strrstr(s,s1)-strstr(s,s2)-strlen(s2):strstr(s,s2)-strrstr(s,s1)-strlen(s1);
            d[2]=strstr(s,s1)-strrstr(s,s2)>0?strstr(s,s1)-strrstr(s,s2)-strlen(s2):strrstr(s,s2)-strstr(s,s1)-strlen(s1);
            d[3]=strrstr(s,s1)-strrstr(s,s2)>0?strrstr(s,s1)-strrstr(s,s2)-strlen(s2):strrstr(s,s2)-strrstr(s,s1)-strlen(s1);;
            int maxdistance=0;  //最远距离
            for(int i=0;i<4;i++)
            {
    
    
                if(d[i]>maxdistance)
                {
    
    
                    maxdistance=d[i];
                }
            }
            printf("%d\n",maxdistance);
        }		
	} 
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/boxueyuki/article/details/130496174