串基本操作的實現(數據結構實驗)


實驗項目四 串基本操作的實現

課程名稱:數據結構

實驗項目名稱:串基本操作的實現

實驗目的:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM