暴力枚举法解决顺序查找和蛮力字符串匹配

前言

提示:忙里偷闲,写点小算法。


提示:以下是本篇文章正文内容,下面案例可供参考

一、顺序查找

1.伪代码
//顺序查找的算法实现,用待查找数K作限位器
//输入一个有n个元素的数组a[]和一个待查找数K
//输出第一个等于待查找数的位置i,没找到则返回-1
a[n]⬅K
i⬅0
while a[i]≠K do
	i⬅i+1
if i<n return i
else return -1
2.C++实现
#include "iostream"
#include "stdlib.h" //需要用随机函数 
#include "time.h"	//需要用time函数 

using namespace std;
//顺序查找 
int main()
{
	int key;//保存待查找数 
	srand((unsigned)time(NULL));//设置随机数种子 
	int num[21];
	for(int i=0;i<20;i++)//赋值 
	{
		num[i]=rand();
	}
	for(int i=0;i<20;i++)
	{
		cout<<num[i]<<" ";
	}
	cout<<endl;
	cout<<"请输入查找数:"<<endl;
	cin>>key; 
	num[21]=key;//提高查找效率,把key放在数组最后面 
	int j=0;
	while(num[j]!=key)
	{
		j++;	
	}
	if(j<21)
	cout<<"目标数在下标为"<<j<<"的位置"<<endl; 
	else
	cout<<"没有找到目标数"<<endl; 
	return 0;
} 
3.运行截图

在这里插入图片描述

二、蛮力法进行字符串匹配

1.伪代码
//该算法实现了蛮力字符串匹配
//输入一个n个字符数组T,代表一段文本
//一个m个字符数组P,代表一个匹配串
//查找成功则返文本中第一个匹配串的下标,否则返回-1
for i⬅0 to m-n do
	j⬅0
	while j<m and P[j]=T[i+j] do
		j⬅j+1
		if j=m return i
return -1
2.C++实现
//蛮力字符串匹配
#include "iostream"
#include "string.h"
#include "cstdio"
using namespace std;
int main()
{
	string text="";//文本字符串 
	string find="";//待查找字符串 
	cout<<"请输入文本字符串:"<<endl;
	cin>>text;
	cin.sync();//清除缓冲区 
	cout<<"请输入待查找字符串:"<<endl;
	cin>>find;
	int n=text.length();//保存文本字符串长度 
	int m=find.length();//保存待查找字符串长度 
	bool flag=false;//判断是否找到了	
	for(int i=0;i<=n-m;i++)//只需要遍历到n-m处 
	{
		int j=0;
		while(j<m&&(find[j]==text[i+j]))//开始进行匹配 
		{
			j++;
			if (j==m)//匹配成功 
			{
				cout<<"匹配字符串从下标"<<i<<"处开始."<<endl;
				flag=true; 
				break; 
			}
		}
	} 
	if(flag==false)
	cout<<"没有找到匹配的字符串."<<endl;
	return 0;
} 
3.运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

creator_gzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值