strstr--字符串处理

本文提供了三种不同的strstr函数实现方法,这些函数用于在一个字符串中查找子串首次出现的位置。通过对比三种实现方式,读者可以了解到不同遍历和匹配策略的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<string.h>
char * strstr_1(char *s1,char *s2);
char *strstr_2(char *s1,char *s2);
char *strstr_3(char *s1, char *s2);
int main()
{
    char *p;
     p=strstr_1("helloworld","wor");
    printf("%s\n",p);
    p=strstr_2("helloworld","wor");
    printf("%s\n",p);
     p=strstr_3("helloworld","wor");
    printf("%s\n",p);


    return 0;
}
char *strstr_1(char *s1,char *s2)
{
    int len2=strlen(s2);
    if (!len2)
        return s1;
    while (*s1++)
    {
        if (*s1==*s2&&(strncmp(s1,s2,len2)==0))
            return s1;
    }
    return NULL;
}
char *strstr_2(char* s1,char *s2)
{
    int n,i,j;
    n=i=j=0;
    while(s1[i])
    {
        n=i;
        while(s2[j]&&s1[i])
        {
            if(s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
                break;
        }
        if (s2[j]=='\0')
            return &s1[i-j];
        else
        {
            i=n+1;
            j=0;
        }
    }
    return NULL;
}

char * strstr_3(char *s1,char* s2)
{
    int n;
    if (*s2)
    {
        while (*s1)
        {
            for (n=0; *(s1 + n) == *(s2 + n); n++)
            {
                if (!*(s2 + n + 1))
                    return (char *)s1;
            }
            s1++;
        }
        return NULL;
    }
    else
        return (char *)s1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值