Coincidencia de cadenas (algoritmo de coincidencia de patrones ingenuo)

Hay dos formas de hacer coincidir cadenas, una es el almacenamiento secuencial estático y la otra es el almacenamiento dinámico dinámico. Ambos métodos se implementan en función de listas secuenciales y listas enlazadas. El algoritmo ingenuo de la cadena es utilizar la longitud de la subcadena para hacer coincidir secuencialmente parte de los caracteres de la cadena principal de la longitud de la subcadena, de modo que los caracteres de la longitud de la subcadena se puedan comparar con el final cada vez. el código se muestra a continuación:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 255
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

/**
串的顺序存储和链式存储 
由于C语言中有对串直接操作的函数,这只列举一种操作 
朴素模式匹配算法 
*/

//静态定义串的结构体(定长顺序存储)
typedef struct{
    char ch[MaxSize];//存储字符的数组 
    int length;//串的实际长度 
}SString; 

//动态方式定义串的结构体(为了避免存储密度低的问题,让结点存储多个字符) 
typedef struct StringNode{
    char ch[4];//每个结点放四个字符 
    struct StringNode *next;//指针域 
}StringNode,*String; 

//动态定义串的结构体(堆分配存储)
typedef struct{
    char *ch;//按照串长分配储存区,ch指向串的首地址 
    int length;//串的实际长度
}HString; 

//堆分配初始化
void InitHString(HString &S){
    S.ch = (char*)malloc(MaxSize*sizeof(char));
    S.length = 0;
} 

//求子串
bool SubString(SString &Sub,SString S,int pos,int len){
    //子串越界
    if(pos+len-1>S.length){
        return false;
    } 
    for(int i=pos;i<pos+len;i++){
        Sub.ch[i-pos+1] = S.ch[i];
    }
    Sub.length = len;
    return true;
}

//朴素模式匹配算法 
int Index(SString S,SString T){
    int k=1;
    int i=k,j=1;
    while(i<S.length && j<=T.length){
        if(S.ch[i]==T.ch[j]){
            ++i;
            ++j;//继续比较后续字符 
        }else{
            k++;//检查下一个子串 
            i=k;
            j=1;
        }
    }
    if(j>T.length){
        return k;
    }else{
        return 0;
    }
} 

int main(int argc, char** argv) {
    HString S;
    InitHString(S);
    return 0;
}

Supongo que te gusta

Origin blog.51cto.com/14049943/2596131
Recomendado
Clasificación