基于串的模式匹配
一、代码要求
-
实现串的StrAssign、StrCompare、ClearString等基本操作;
-
使用KMP算法实现模式匹配。
1)使用堆分配的方式申请串内存空间;
2)表达式通过命令行参数读取,并判断命令行参数的数量是否正确。
二、理论知识
1.串的基本知识
串(string)是由若干字符组成的有限序列。
2.串的表示和实现
- 定长顺序存储表示
- 堆分配存储表示
3.串的模式匹配算法
待更新
4.代码思路
待更新
三、具体代码
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define START 1
typedef int Status;
//题目要求:
//输入:通过命令行参数输入原字符串和模式字符串。
//输出:(1)命令行参数不正确输出字符串ERROR_01;
//(2)如果查找到模式串,输出关键字在字符串中的位置(计数从1开始);
//(3)如果未找到模式串则输出-1 。
//基本要求:
// 1、实现串的StrAssign、StrCompare、ClearString等基本操作;
// 2、使用KMP算法实现模式匹配。
//注:1)使用堆分配的方式申请串内存空间;
// 2)表达式通过命令行参数读取,并判断命令行参数的数量是否正确
//※串的堆分配存储表示
typedef struct
{
char *ch;
int length; //串长度
} HString;
//※基本操作的函数声明
//字符串的复制操作,把str2复制到str1上,str2开始位置为startpos2,str1开始位置为startpos1。
Status StrCopy(char *Str1, char *Str2, int count, int StartPos1, int StartPos2);
//生成一个值等于字符串串常量chars的串
Status StrAssign(HString &MyStr, char *chars);
//求MyStr的字符串的长度
int StrLength(HString MyStr);
//比较两个字符串的大小,并返回比较结果
int StrCompare(HString MyStr1, HString MyStr2);
//将MyStr清为空串,并释放其空间
Status ClearString(HString &MyStr);
//用MyStr返回Str1和Str2衔接而成的新串
Status Concat(HString &MyStr, HString &Str1, HString &Str2);
//用sub返回串MyStr第pos起长度为len的串
Status SubString(HString &Sub, HString MyStr, int pos, int len);
//得到模式串MyStr的next数组
Status get_next(HString &MyStr, int *next);
//主串为MStr,模式串为PatStr,进行匹配,返回开始重合的主串的位置
int Index_KMP(HString MStr, HString PatStr, int *next, int pos, int &error);
//※基本操作的函数定义
Status StrCopy(char *Str1, char *Str2, int count, int StartPos1, int StartPos2)
{
int i = 0