现成汉字字符串的模糊查找函数

参见:http://www.vccode.com/file_show.php?id=2457#xx1931xx

而且我给出了 BlurFindStr 函数的改进:
<code>
BOOL BlurFindStr(CString& strSource, CString& strFindCell)
{
int nLenCell = strFindCell.GetLength();
int nLenSource = strSource.GetLength();
if(nLenCell < 1)
return TRUE;
if(nLenSource <1)
return FALSE;
strSource.MakeLower();
strFindCell.MakeLower();

int i = 0; // 正在处理的strSource的下标
while(i < nLenSource)
{
int ii = i; // 保存一个备份
int j=0; // 正在处理的strFindCell的下标
// strSource 的递增量(如果当前是中文,则为2;否则,则为1)
int increment = (strSource.GetAt(ii) & 0x80)? 2 : 1;
while(j < nLenCell)
{
// 都是汉字
if(((strSource.GetAt(ii) & 0x80)) && ((strFindCell.GetAt(j) & 0x80)))
{
if (strSource.GetAt(ii) == strFindCell.GetAt(j) && strSource.GetAt(ii+1) == strFindCell.GetAt(j+1))
{
ii = ii + 2;
j = j + 2;
}
else
{
i = i + increment;
break;
}
}
// strSource是汉字
else if(((strSource.GetAt(ii) & 0x80)) && (!(strFindCell.GetAt(j) & 0x80)))
{
if (IsBlur(strSource.GetAt(ii), strSource.GetAt(ii+1), strFindCell.GetAt(j)))
{
ii = ii + 2;
j = j + 1;
}
else
{
i = i + increment;
break;
}
}
// strFindCell是汉字
else if((!(strSource.GetAt(ii) & 0x80)) && ((strFindCell.GetAt(j) & 0x80)))
{
i = i + increment;
break;
}
// 都不是汉字
else if((!(strSource.GetAt(ii) & 0x80)) && (!(strFindCell.GetAt(j) & 0x80)))
{
if (strSource.GetAt(ii) == strFindCell.GetAt(j))
{
ii++;
j++;
}
else
{
i = i + increment;
break;
}
}
}
if (j >= nLenCell) return TRUE;
}
return FALSE;
}
</code>

 

欢迎讨论,good luck!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值