习题11-6 查找子串

前言

记录一下这道题,我没有用strlen但是有报错,不知道为什么。

正文

题目
本题要求实现一个字符串查找的简单函数。
函数接口定义:char *search( char *s, char *t );
输入样例1:
The C Programming Language
ram
输出样例1:
10
输入样例2:
The C Programming Language
bored
输出样例2:
-1
代码一(正确)
char *search(char *s, char *t)
{
    int tlen = strlen(t);
    int cnt;
    char *p, *q;
    q = t;
    while (*s != '\0')
    {
        p = s;
        cnt = 0;
        while (*s == *t)
        {
            s++;
            t++;
            cnt++;
        }
        if (cnt >= tlen)//当cnt大于tlen循环表示全部遍历
        {
            return p;
        }
        t = q;//还原t
        s++;
    }
    return NULL;
}

源:https://www.jianshu.com/p/ab6e5371d10f

代码二(有错)
/* 你的代码将被嵌在这里 */
char *search(char *s, char *t){
	char *pos;
	while(*s){
		if(*t==*s){
			pos=s;
			t++;s++;
			if(*t==0)//只有一个字符串的情况
				return pos;
			else if (*t!=*s)//当匹配一个字母后面的不匹配时
			{
                  pos=NULL;
				  t--;
				  s--;
			}
			else//当匹配一个字母后面的一个也匹配时
			{
				while(*t==*s&&*s!=0){//*s!=0,确保走完s长度就结束
                     t++;
					 s++;
				}
				if(*t==0){
					return pos;//当t指针指到0,即全部匹配了,返回pos
				}
				else
					pos=NULL;//否则返回NULL
			}
		}
		s++;
	}	
     return pos;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值