码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构实验:串基本操作的实现

时间:2017-11-24 23:48:57      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:顺序   iostream   ati   har   tps   char   保存   操作   运行   

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

课程名称:数据结构

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

实验目的:

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;  
}

 

数据结构实验:串基本操作的实现

标签:顺序   iostream   ati   har   tps   char   保存   操作   运行   

原文地址:http://www.cnblogs.com/xisheng/p/7892664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!