天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 69|回复: 0

KMP算法.cpp

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
// MyKMP.cpp : Defines the entry point for the console application.

#include "stdio.h"

int next[255];

char pat [] = "aacaab";
char str [] = "fsoifhewgsdksdkfhsdifhewhfefksdhfdsoihfoehfosdhfdsaacaab";

void getNext( char pat [], int next [] )
{
    int j = 0;

    for (int i = 0; pat[i]; i++)
    {
        if (i == 0)
            next[i] = -1;
        else
        {
            if (pat[i] == pat[j])
            {
                ++i;
                ++j;
                next[i] = j;
            }
            else
                j = next[j];
        }
    }
}

int KMP( char *str1, char *pat, int *next )
{
    int i = 0, j = 0;

    while (str[i])
    {
        if (pat[j] == 0)
            return i - j;

        if (j == 0 || str[i] == pat[j])
        {
            ++i;
            ++j;
        }
        else
            j = next[j];
    }

    if (pat[j] == 0)
        return i - j;

    return -1;
}

int main( int argc, char *argv [] )
{
    int i;
    getNext(pat, next);
    int result = KMP(str, pat, next);
    printf("%s\n", str);

    for (i = 0; i<result; i++)
        printf(" ");

    printf("%s\n", pat);
    printf("at %d\n", result);
    return 0;
}

 

 

 

 

KMP算法.cpp
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:36 , Processed in 0.128446 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表