实现字符串的模式匹配的简单算法(BF算法)。建议使用字符串的顺序存储完成. //从主串s的第pos个字符开始查找子串t。若找到,则返回子串t在主串s中第一次出现的位置,否则返回0。 int StrIndex_BF(SString s, SString t, int pos) 或者 int StrIndex_BF(HString s, HString t, int pos) 输入说明: 第一行输入主串 第二行输入子串 输出格式: 输出Location: #,其中#是子串在主串中的位置编号 输入样例1: sdfrt df 输出样例1: Location: 2 输入样例2: mystring aring 输出样例2: Location: not found! 用c语言写出
时间: 2023-06-06 18:08:09 浏览: 146
BF算法是一种朴素的模式匹配算法,它的核心思想是从主串的每一个位置开始,逐一比较子串中的每一个字符,直到找到相同的字符或者比较完毕。建议使用字符串的顺序存储完成。
下面是BF算法的代码实现:
int StrIndex_BF(SString s, SString t, int pos){
int i = pos; //从pos位置开始查找
int j = 1;
while(i <= s.length && j <= t.length){ //主串和子串都未比较完
if(s.ch[i] == t.ch[j]){ //如果当前字符相等
i++;
j++;
}
else{ //如果当前字符不相等
i = i - j + 2; //i回溯到上一个匹配的位置的下一位
j = 1; //j重新从子串的第一个字符开始匹配
}
}
if(j > t.length){ //匹配成功
return i - t.length; //返回匹配的位置
}
else{ //匹配失败
return 0;
}
}
其中,SString和HString分别代表使用顺序存储结构和链式存储结构的字符串类型。
具体实现时,从主串的第pos个字符开始逐一比较子串中的每一个字符,如果当前字符相等则继续比较下一个字符,否则将主串中的比较位置i回溯到上一个匹配的位置的下一位,子串的比较位置j则重新从1开始。如果子串匹配完毕,则匹配成功,返回匹配的位置;否则匹配失败,返回0。
最终输出的为匹配成功时的位置,格式为Location:。
阅读全文