KMP算法

字符串匹配,失败时回溯。。

void getNext(char needle[], int next[]);
int kmp(char needle[], char haystack[], int next[]);

int main()
{
    char needle[255] = {'\0'};
    char haystack[255] = {'\0'};
    int next[255] = {0};
    char el;
    int count = 1;
    
    printf("输入haystack字符串,以#结束:\n");
    scanf("%c", &el);
    while(el != '#')
    {
        haystack[count] = el;
        count ++;
        scanf("%c", &el);
    }
    haystack[0] = count-1;
    
    getchar();
    
    printf("输入needle字符串,以#结束:\n");
    scanf("%c", &el);
    count = 1;
    while(el != '#')
    {
        needle[count] = el;
        count ++;
        scanf("%c", &el);
    }
    needle[0] = count-1;
    
    getNext(needle, next);//生成next数组,next数组用于记录needle中每个字符匹配失败时将要回溯的位置。
    
    count = kmp(needle, haystack, next);
    if(count == 0)
    {
        printf("没找到\n");
    }else {
        printf("找到了,位置为%d\n", count);
    }
    return 0;
}

void getNext(char needle[], int next[])
{
    int i = 1, j = 1;
    next[1] = 0;
    next[2] = 1;
    j = 2;
    
    while( j<needle[0] )
    {
        if( i == 0 || needle[i] == needle[j] )
        {
            i++;
            j++;
            //next[j] = i;
            if(needle[i] == needle[j]) //用于避免【a a a a a】这样的needle在第三个a匹配失败时回溯到2,,,让其回溯到0
            {
                next[j] = next[i];
            }else {
                next[j] = i;
            }
        }else {
            i = next[i];
        }
    }
}

int kmp(char needle[], char haystack[], int next[])
{
    int i = 1, j = 1;
    
    while(i<=needle[0] && j<=haystack[0])
    {
        if( i==0 || needle[i] == haystack[j])
        {
            i++;
            j++;
        }else {
            i = next[i];
        }
    }
    
    if(i>needle[0])
    {
        return j-needle[0];
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/buerr/p/7395733.html

python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实
基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! 基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设计与实现(含程序源码和数据库)基于python+django校园智能点餐管理系统设
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值