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
strstr函数改进版

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

被折叠的 条评论
为什么被折叠?



