两个str_str函数,有空要研究下

函数1:

//========================================================================
//Function:
//Input:u8 *srcstr:要找的字符串指针,u8 srclength:要找的字符串的长度
// u8 *dststr:被查找的字符串指针,u8 dstlength:被查找的字符串长度
//Output:
//Description:
//========================================================================
BOOL app_find_str_in_str(u8 *srcstr, u8 srclength,
u8 *dststr, u8 dstlength)
{
BOOL ret_value = FALSE;

if(dstlength >= srclength)
{
while(dstlength > 0)
{
if(*srcstr == *dststr)
{
srclength--;
if(0 == srclength)
{
ret_value = TRUE;
break;
}
else
{
srcstr++;
}
}

dststr++;
dstlength--;
}
}

return ret_value;
}

函数2:

//========================================================================
//Function:
//Input:u8 *T:要找的字符串,u8 dstlength:要找的字符串的长度
// u8 *S:在该字符串中查找,u8 srclength:被查找的字符串长度
//Output: FALSE:没有找到, TRUE :找到目的字符串
//Description:
//========================================================================
BOOL app_find_str_in_str(u8 *T, u8 dstlength,
u8 *S, u8 srclength)
{//KMP字符匹配算法

s16 i, j, n, m, next[AT_ACK_CMD_MAX_LEN];
BOOL ret_value = FALSE;

if(dstlength > srclength) return ret_value;

n = srclength; m = dstlength;
//求NEXT数组
next[0]=-1;
j=-1;
for(i=1;i<m;i++) { while(j>=0&&T[j+1]!=T[i]) j=next[j];

if(T[j+1]==T[i]) j++;

next[i]=j;
}

//匹配字符串
j=-1;
for(i=0;i<n;i++) { while(j>=0&&T[j+1]!=S[i]) j=next[j];

if(T[j+1]==S[i]) j++;

if(j==m-1)
{
ret_value = TRUE; //找到目标字符串
break;
}
}
return ret_value;
}

等有空仔细研究下

分享到: 更多
版权申明:

本站保留所有原创文章的版权,本站地址:奔跑的博客[http://www.elecbench.com]

原创文章转载时请注明出处,并添加文章所在页面的链接:http://www.elecbench.com/%e4%b8%a4%e4%b8%aastr_str%e5%87%bd%e6%95%b0%ef%bc%8c%e6%9c%89%e7%a9%ba%e8%a6%81%e7%a0%94%e7%a9%b6%e4%b8%8b/

本站所有 2010年3月4日 以后发表、未标明为“转载”的文章均是本站原创。

发表评论


(设置自己的个性头像)

*

申请属于你的免费顶级域名