字符串逆序查找的问题(电子书从后往前查找)
张明云 2012-04-23 09:43:00 请教大家几个问题:
1、目前我自己有一个比较笨的字符串从后往前查找的算法,这个算法慢并且有瑕疵(从后往前递减的时候出现了乱码,因为汉字和标点符号的原因):
算法是这样的:先通过strstr判断当前页是否有需要查找的关键字,如果有则直接偏移到该也末尾,指向该页末尾的指针每次递减关键字长度的大小,如果遇到当前递减字符的值大于0x80则再减一次。如果此页没有关键字则跳转到前一页继续如上操作。代码如下:
unsigned char *p_Tmp = NULL;
unsigned char *p_CurrentPageBuf = NULL;
//malloc当前页大小的空间并从文本中读取该页文本保存到申请的空间里。
p_CurrentPageBuf = malloc(...);
if(NULL != p_CurrentPageBuf)
{
memset(p_CurrentPageBuf,0x00,currentPageSize);
fs_seek(....);
fs_read(p_CurrentPageBuf,....);
}
p_Tmp = strstr(p_CurrentPageBuf,keyWord);
do
{
if( NULL != p_Tmp)
{
p_Tmp = p_CurrentPageBuf + CurrentPageSize;
if(count < keyWordLen)
{
p_Tmp--;
count++;
if(*(p_Tmp-1)&0x80)//主要是这里有问题,在向前递减的过程中遇到标点符号,就减出问题来了。
{
p_Tmp--;
count++;
}
}
p_Str = strstr(p_Tmp,keyWord);
}
}while((p_Str == NULL) ||(p_Tmp-p_CurrentPageBuf < 0));
请教大家的问题:如何优化这段代码,特别是向前递减的代码段。
2、有没有比较经典的逆序查找字符串的算法或者想法。