上面例子的变型
时间:2010-07-04 来源:huashan358
此算法的一个优点,遇到了与子字符串首字母匹配的字母才开始字符串字符匹配计算
否则跳过字符继续遍历下一个,相比前面的遍历节省了时间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char sour[20] = {"I miss you"};
char sub[10] = {"miss"};
char *p = sour;
char tmp[10];
static char lookup[256]; /* 通过下标可以找到每个字母 */ lookup[ 0 ] = 1; /* 字符串结尾符号 结尾符号存在数组 0 位置 */
lookup[(unsigned char)(*sub)] = 2; /* 首字母匹配 子字符串首字母所在的地址存入 2 */
for( ; *p; p++)
{
switch( lookup[(unsigned char)(*p)])
{
case 0:
break;
case 1:
printf("not match\n");
return 0;
case 2:
if(strncmp(p+1, sub+1,3) == 0)
{
printf("%s\n", sub);
return 1;
}
}
}
return 0;
} 摘自 程序员实用算法
#include <stdlib.h>
#include <string.h>
int main()
{
char sour[20] = {"I miss you"};
char sub[10] = {"miss"};
char *p = sour;
char tmp[10];
static char lookup[256]; /* 通过下标可以找到每个字母 */ lookup[ 0 ] = 1; /* 字符串结尾符号 结尾符号存在数组 0 位置 */
lookup[(unsigned char)(*sub)] = 2; /* 首字母匹配 子字符串首字母所在的地址存入 2 */
for( ; *p; p++)
{
switch( lookup[(unsigned char)(*p)])
{
case 0:
break;
case 1:
printf("not match\n");
return 0;
case 2:
if(strncmp(p+1, sub+1,3) == 0)
{
printf("%s\n", sub);
return 1;
}
}
}
return 0;
} 摘自 程序员实用算法
相关阅读 更多 +