字符串匹配(KMP&BF)
2024-09-05 05:02:12
字符串匹配
题目描述
设计一个程序,从一个主字符串中查找一个子字符串在主串中第一次出现的位置。主串和子串的长度不超过100。如果找不到,则输出-1.
程序输入说明
第一行输入一个整数N,说明需要进行匹配的实例数。
第二行输入第一组需要进行匹配的主串
第三行输入第一组需要匹配的子字符串。
以下各行按照上面两行的格式输入,直到输入了N组匹配实例。
第二行输入第一组需要进行匹配的主串
第三行输入第一组需要匹配的子字符串。
以下各行按照上面两行的格式输入,直到输入了N组匹配实例。
程序输出说明
输出N行,每行显示对应的匹配组中子串在主串中第一次出现的位置。
程序输入样例
3
abaaaaaa
a
bacdeagb
ac
aaaa
bb
程序输出样例
1
2
-1
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; typedef char* String; int len1,len2;
char S[];
char T[]; void get_next(String T,int *next){
int j = ;
int i = ;
next[] = ;
while( i<len2 ){
if(==j || T[i]==T[j])
{
i++;
j++;
next[i] = j;
}
else{
j = next[j];
}
}
} int Index_KMP(String S,String T,int pos){
int i=pos;
int j=;
int next[];
get_next(T,next);
while(i<=len1&&j<=len2){
if(j==||S[i]==T[j]){
i++;
j++;
}
else{
j=next[j];
}
}
if(j>len2){
return i-len2;
}
else
return -;
} int main(){
int n;
cin>>n;
while(n--){
scanf("%s%s",S+,T+);
len1 = strlen(S+);
len2 = strlen(T+);
printf("%d\n",Index_KMP(S,T,));
}
return ;
}
BF算法
//BF算法
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; char s[],t[];
int len1,len2; int main(){
int n;
cin>>n;
while(n--){
scanf("%s%s",s,t);
len1 = strlen(s);
len2 = strlen(t);
int i = ,j = ;
while( i < len1 && j < len2 ){
if( s[i] == t[j] ){
i++;
j++;
}
else{
i = i-j+;
j = ;
}
}
if( j == len2 )
cout<<i-j+<<endl;
else
cout<<"-1"<<endl;
}
return ;
}
最新文章
- C# Stream
- 设计模式/原则篇- Unit of Work
- POJ 2481Cows(树状数组 + 好题)
- HDU 4649 Professor Tian(DP)
- javascript耐人寻味
- 用C语言实现评论系统设计 - 无数据库版
- bzoj 1228: [SDOI2009]E&;D 阿达马矩阵
- SVN使用方法总结
- 快速设置IP的脚本
- spring boot maven 插件
- 2、jQuery的一些静态方法
- Lua 语言基本语法
- Foreach循环输出索引值
- passive 的事件监听器(转载)
- bat语法需要注意的地方
- 【.Net】鼠标点击控制鼠标活动范围 ClipCursor
- [翻译] NSDate-TimeAgo
- help()
- sql server学习路径地址
- 20165207 预备作业3 Linux安装及学习
热门文章
- For... in 及 For… of 及 forEach
- 2 webpack 4 加vue搭建开发环境最终配置
- MySQL: Can’t connect to MySQL server on (111 “Connection refused”)
- js中拼接html代码时onclick参数问题
- GNS3
- 编码、加密、Hash
- JVM之Java运行时数据区(线程隔离区)
- 一篇文章教你如何部署.NET Core WPF应用,你还在等什么?
- 如何查看float在内存中存储方式
- VS 项目清理小工具 ClearSolution