数据结构学习笔记2 串的朴素模式匹配算法

串的朴素模式匹配算法

算法思想

1、从主串S的首字符出发遍历(int i)所有后方字符总数不小于T.length的字符。
2、若存在与T的首字符匹配的字符,再将T的字符和该字符后的字符一一对应,若均匹配,则返回i,否则继续遍历。
3、若遍历完所有字符均不满足条件,则返回-1。

代码

#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<stack>
#include<iostream>
using namespace std;
#define MaxSize 100

//静态定义串
typedef struct string {
	char str[MaxSize];	//每个分量存储一个字符
	int length;			//串的实际长度
}String;

//朴素模式匹配
int Index(String S, String T) {//返回T的首字符位置,否则返回0
	if (T.length > S.length)
	{
		return 0;//模式串长于主串,一定不存在
	}
	for (int i = 0; i < S.length - T.length + 1; i++)
	{
		if (S.str[i] == T.str[0])//若存在与T的首字符匹配的字符
		{
			if (T.length == 1)
			{
				i++;
				return i;//若模式串长度为1,匹配
			}
			int j = ++i;
			int k = 1;
			while (S.str[j] == T.str[k] && k < T.length)//将T的字符和该字符后的字符一一对应
			{
				j++;
				k++;
				if (k == T.length)
				{
					return i;//若均匹配,则返回i
				}
			}
		}
	}
	return -1;
}

int main(void) {
	String s1, s2;
	cout << "请输入主串s1的内容:" << endl;
	cin >> s1.str;
	s1.length = strlen(s1.str);
	cout << "请输入模式串s2的内容:" << endl;
	cin >> s2.str;
	s2.length = strlen(s2.str);
	int m = Index(a, b);
	if (m != -1)
	{
		cout << "s1中存在s2,s2首字符位于s1的第" << m << "个字符处。";
	}
	else
	{
		cout << "s1中不存在s2。" << endl;
	};
	return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值