zoukankan      html  css  js  c++  java
  • 串基本操作的实现(数据结构实验)

    实验项目四 串基本操作的实现

    课程名称:数据结构

    实验项目名称:串基本操作的实现

    实验目的:

    1.掌握串的模式匹配操作。

    实验要求:

    1、    分别使用BF和KMP算法完成串的模式匹配。

    实验过程:

    1、    设计完成next值的计算函数;

    2、    设计完成修正next值的函数;

    3、    KMP算法代码;

    4、    输入子串(abbc)和主串(abbabbcad)

    5、    输出子串在主串中开始的位置。

    实验报告中给出next,修正next,KMP及主函数的代码。

    实验结果:

    输入: 子串:abbc; 主串:abbabbcad

    输出:4

    实验分析:

    1.普通next和修正next的区别;

    2.列举调试运行过程中出现的错误并分析原因。

    要求:

    (1) 程序要添加适当的注释,程序的书写要采用缩进格式。

    (2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

    (3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。

    (4) 上传源程序到课堂派。顺序表的源程序保存为Stringindex.cpp。

    程序代码:

    // Test.cpp : Defines the entry point for the console application.  
    //  
    //#include "stdafx.h"  
    #include <stdio.h>  
    #include "stdlib.h"
    #include <iostream>
    using namespace std;
    
    //宏定义    
    #define TRUE   1    
    #define FALSE   0    
    #define OK    1    
    #define ERROR   0  
    
    #define  MAXSTRLEN 100
    
    typedef char    SString[MAXSTRLEN + 1];
    
    void GetNext(SString T, int next[]);
    int KMPindex(SString S, SString T, int pos);
    /************************************************************************/
    /* 
     返回子串T在主串S中第pos位置之后的位置,若不存在,返回0
    */
    /************************************************************************/
    int KMPindex(SString S, SString T, int pos)
    {
        if (pos <1 ||  pos > S[0] ) exit(ERROR);
        int i = pos, j =1;
        int next[MAXSTRLEN];
        GetNext( T, next);
        while (i<= S[0] && j <= T[0])
        {
            if (S[i] == T[j]) {
                ++i; ++j;
            } else {
                j = next[j];
            }
        }
        if(j > T[0]) return i - T[0];
        return ERROR;
    }
    
    /************************************************************************/
    /*      求子串next[i]值的算法
    */
    /************************************************************************/
    void GetNext(SString T, int next[])
    {      int j = 1, k = 0;
        next[1] = 0;
        while(j < T[0]){
            if(k == 0 || T[j]==T[k]) {   
                ++j;  ++k;     next[j] = k;  
            } else {
                k = next[k]; 
            }
        }
    }
    
    int main(){
         SString S = {9,'a','b','b','a','b','b','c','a','d'};  
        SString T = {4,'a','b','b','c'};  
        int pos;  
        pos = KMPindex( S,  T, 1);  
        cout<<"Pos:"<<pos;  
    }
  • 相关阅读:
    Core3.0部署后访问接口提示500.30
    Core3.0返回的Json数据大小写格式问题
    linux内核分析之fork()
    【转】【机器人学:运动规划】OMPL开源运动规划库的安装和demo
    【转】毫米波雷达和激光雷达的对比
    [转]开发者需要的 9 款代码比较工具
    [转]关于特征点法、直接法、光流法slam的对比
    [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2
    [转]ORB特征提取-----FAST角点检测
    [转]图像金字塔
  • 原文地址:https://www.cnblogs.com/xisheng/p/7892664.html
Copyright © 2011-2022 走看看