字符串匹配BF算法和KMP算法

16学年—17学年第 1学期 数据结构 实验任务书

专业名称:              实验学时:    2    

课程名称:数据结构      任课教师:  翟海霞     

实验题目: 串的模式匹配算法实现                  

实验环境:    Visual C++ 6.0                   

实验目的

理解串的特点和几种不同的存储结构,掌握基本的运算(赋值、比较、连接,模式匹配……等),比较模式匹配BF算法和KMP算法;  

 

实验内容:

1.实现串的赋值及模式匹配算法。

2.设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂性为0(n))。

#include
#include
#include   
#define MaxSize 100 //串的最大长度   
//串的定长顺序储存结构   
typedef struct//  
{    
    char ch[MaxSize];//储存串的一维数组  
}sstring;

int  Index_BF(sstring S,sstring T,int pos)
{
	int i=pos,j=0;
	while(i

KMP算法

#include
#include
#include
#define MAXSIZE 100
typedef struct
{
	char ch[MAXSIZE+1];
}sstring;
void get_next(sstring T,int next[])
{
	//求模式串T的next函数值并存入数组
	int i=1,j=0; 
	next[1]=0;
	while(i=strlen(T.ch)) return i-strlen(T.ch); //匹配成功 
	 else return 0;//匹配失败
 } 
int main()
{
	sstring S,T;
	int pos,ans,next[MAXSIZE];
	printf("请输入主串S:\n");
	scanf("%s",S.ch);
	printf("请输入模式串T:\n");
	scanf("%s",T.ch);
	printf("请输入pos的值:\n");
	scanf("%d",&pos);
	get_next(T,next);  
    ans=Index_KMP(S,T,pos,next);  
 if(ans==0)  
 printf("匹配失败\n");  
 else  
    printf("模式T在主串S中第pos个字符开始第一次出现的位置为:%d\n",ans);  
	return 0;
 } 
 


计算next函数修正值

void get_nexttval(SString T,int nextval())  
{  
    int i,j;  
    i=1;  
    nextval[1]=0;  
    j=0;  
    while(i


正数置于负数前

#include
using namespace std;
#include 
void ni(char *str)
{

	if(*str)
	{
	ni(str+1);
	cout<<*str;
	}
}
int main()
{
	char str[10]="nihao";
	ni(str);
	printf("\n");
	return 0;
}

void Arrange(int A[],int n) 
//n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面
{int i=0,j=n-1,x;  //用类C编写,数组下标从0开始
 while(i0)  i++;
while(i



你可能感兴趣的:(编程语言,~~随笔---模板,数据结构(课程作业),KMP)