数据结构实验四 串(模式匹配,删除子串)

实验三串
一、 实验目的
1. 熟悉串的顺序存储结构
2. 掌握串的基本运算及应用
二、 实验内容
1.模式匹配:串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。

//seqstring.h
//本头文件为实验四第一问串的顺序存储
#include
using namespace std;
const int size=100;

class seqstring   //串采用顺序存储结构
{
    private:
        char str[size];
        int len;
    public:
        seqstring(){len=0;}   //无参数构造函数
        seqstring(char a[],int n); //有参数构造函数
        ~seqstring(){}   //析构函数
        void Delete(int i);  //删除第i个位置的元素
        void printstring();  //显示串的内容
        char get(int i);//得到位置i的元素
};

seqstring::seqstring(char a[],int n)//有参数构造函数
{
    for(int i=0;i'\0';
    len=n;
}

void seqstring::printstring() //显示串的内容
{
    for(int i=0;icout<cout<void seqstring::Delete(int i)//删除第i个位置的元素
{
    int j=0;
    for(j=i;j1]=str[j];
    }
    len--;
}

char seqstring::get(int i)//得到位置i的元素
{
    return str[i];
}

//main.cpp
#include
#include"seqstring.h"
using namespace std;

int BF(seqstring s,seqstring t)//朴素模式匹配算法
{
    int i,j;
    i=0;j=0;
    while((s.get(i)!='\0')&&(t.get(j)!='\0'))
    {
        if(s.get(i)==t.get(j))
        {
            i++;j++;
        }
        else
        {
            i=i-j+1;j=0;
        }
    }
    if(t.get(j)=='\0')return(i-j+1); //存在查找的字符串返回位置
    else return 0;                   //不存在返回0
}

int main()
{
    char S[]="aaaabc"; //测试aaaabc中是否存在abc
    char T[]="abc";
    seqstring s(S,6);
    seqstring t(T,3);
    int a;
    a=BF(s,t);
    cout<"是否存在"<if(a==0)cout<<"不存在"<else cout<<"存在,位置是"<return 0;
}

2.删除子串:编写一个算法void strDelete(seqstring*S,int pos,int len),从串S中删除第pos个字符开始长度为len的子串。要求:1≤pos≤S->length-len+1

//seqstring.h
//本头文件为实验三第一问串的顺序存储
#include
using namespace std;
const int size=100;

class seqstring   //串采用顺序存储结构
{
    private:
        char str[size];
        int len;
    public:
        seqstring(){len=0;}   //无参数构造函数
        seqstring(char a[],int n); //有参数构造函数
        ~seqstring(){}   //析构函数
        void Delete(int i);  //删除第i个位置的元素
        void printstring();  //显示串的内容
        char get(int i);//得到位置i的元素
};

seqstring::seqstring(char a[],int n)//有参数构造函数
{
    for(int i=0;i'\0';
    len=n;
}

void seqstring::printstring() //显示串的内容
{
    for(int i=0;icout<cout<void seqstring::Delete(int i)//删除第i个位置的元素
{
    int j=0;
    for(j=i;j1]=str[j];
    }
    len--;
}

char seqstring::get(int i)//得到位置i的元素
{
    return str[i];
}

//main.cpp
#include
#include"seqstring.h"
using namespace std;

int BF(seqstring s,seqstring t)//朴素模式匹配算法
{
    int i,j;
    i=0;j=0;
    while((s.get(i)!='\0')&&(t.get(j)!='\0'))
    {
        if(s.get(i)==t.get(j))
        {
            i++;j++;
        }
        else
        {
            i=i-j+1;j=0;
        }
    }
    if(t.get(j)=='\0')return(i-j+1); //存在查找的字符串返回位置
    else return 0;                   //不存在返回0
}

int main()
{
    char S[]="aaaabc"; //测试aaaabc中是否存在abc
    char T[]="abc";
    seqstring s(S,6);
    seqstring t(T,3);
    int a;
    a=BF(s,t);
    cout<"是否存在"<if(a==0)cout<<"不存在"<else cout<<"存在,位置是"<return 0;
}

你可能感兴趣的:(数据结构)