C语言 strstr忽略大小写

本文介绍了一个基于strstr函数的改进版本stristr,该版本支持在字符串搜索中忽略大小写差异。通过对原strstr函数进行简单修改,实现了高效的大写不敏感字符串搜索功能。

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

strstr可以用来查找字符串,但是不支持忽略大小写的功能,虽然可以全部转为大写再判断,但是会影响效率。

所以需要在strstr的基础上修改,下面是strstr的源码。

/***
*strstr.c - search for one string inside another
*
*       Copyright (c) Microsoft Corporation. All rights reserved.
*
*Purpose:
*       defines strstr() - search for one string inside another
*
*******************************************************************************/

#include <cruntime.h>
#include <string.h>

/***
*char *strstr(string1, string2) - search for string2 in string1
*
*Purpose:
*       finds the first occurrence of string2 in string1
*
*Entry:
*       char *string1 - string to search in
*       char *string2 - string to search for
*
*Exit:
*       returns a pointer to the first occurrence of string2 in
*       string1, or NULL if string2 does not occur in string1
*
*Uses:
*
*Exceptions:
*
*******************************************************************************/

char * __cdecl strstr (
        const char * str1,
        const char * str2
        )
{
        char *cp = (char *) str1;
        char *s1, *s2;

        if ( !*str2 )
            return((char *)str1);

        while (*cp)
        {
                s1 = cp;
                s2 = (char *) str2;

                while ( *s1 && *s2 && !(*s1-*s2) )
                        s1++, s2++;

                if (!*s2)
                        return(cp);

                cp++;
        }

        return(NULL);

}

效率非常高的库函数,我们稍作修改即可。

char * __cdecl stristr (
                       const char * str1,
                       const char * str2
                       )
{
    char *cp = (char *) str1;
    char *s1, *s2;
    
    if ( !*str2 )
        return((char *)str1);
    
    while (*cp)
    {
        s1 = cp;
        s2 = (char *) str2;
        
        while ( *s1 && *s2 && toupper(*s1)==toupper(*s2) ){
            s1++, s2++;
        }
        
        if (!*s2)
            return(cp);
        
        cp++;
    }
    
    return(NULL);
    
}

这样实现了strstr忽略大小写匹配

参考:https://www.itdaan.com/blog/2017/11/23/8a000aa1d66b8537f4d23718fb00f9a4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值