strstr是用于字符串中查找第一个匹配字符串所在位置的函数,但是在一段内存中,要查找匹配的字符串,就不行。
毕竟,内存中,可能有'/0',碰到'/0',strstr就返回了,因此,我重新作了一个函数memstr,以方便在内存中也能查找字符串,另外还有一些扩展函数等等。
//在一段内存缓冲中查找指定字符串的位置,从头开始查找,不区分大小写。
//返回第一个找到的位置。
//str1 - 内存缓冲的头指针
//nLen1 - 内存缓冲长度
//str2 - 要查找匹配的字符串
char * memstr(const char * str1, int nLen1, const char * str2)
{
if ((NULL == str1) || (NULL == str2) || (nLen1 <= 0))
return NULL;
long ls1 = nLen1;
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (ls1 > 0)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
ls1--;
}
return(NULL);
}
//===========================================
//
bool bcompi(BYTE byA, BYTE byB)
{
if (byA - byB == 0)
{
return true;
}
else
{
if (!((byA >= 'A' && byA <= 'Z') || (byA >= 'a' && byA <= 'z')))
return false;
if (!((byB >= 'A' && byB <= 'Z') || (byB >= 'a' && byB <= 'z')))
return false;
if ((byA - byB == 'a' - 'A') || (byB - byA == 'a' - 'A'))
return true;
else
return false;
}
}
//在一段内存缓冲中查找指定字符串的位置,从头开始查找,区分大小写。调用bcompi()
//返回第一个找到的位置。
char * memistr(const char * str1, int nLen1, const char * str2)
{
if ((NULL == str1) || (NULL == str2) || (nLen1 <= 0))
return NULL;
long ls1 = nLen1;
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (ls1 > 0)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && bcompi(*s1, *s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
ls1--;
}
return(NULL);
}
//===========================================
//在一段内存缓冲中查找指定字符串的位置,从尾部开始查找,不区分大小写。
//返回第一个找到的位置。
char * memstrrev(const char * str1, int nLen1, const char * str2)
{
if ((NULL == str1) || (NULL == str2) || (nLen1 <= 0))
return NULL;
long ls2 = strlen(str2);
long ls1 = nLen1 - ls2;
char *cp = (char *)(str1 + ls1);
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (ls1 > 0)
{
s1 = cp;
s2 = (char *)str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp--;
ls1--;
}
return(NULL);
}