字符串增强匹配

                                                                  字符串增强匹配
假设:有一个文本,想从里面搜索某些信息,
算法:horspool算法,
@浅夏沫若.code:
#include
#include
using namespace std;
string str1;
string str2;
int strlen1;
int strlen2;
                                         //求移动长度
int movelength(char ch)
{
 if (strlen2 == 1)
  return strlen2;
 if (strlen2 == 0)
  return 0;
 for (int i = strlen2 - 2; i >= 0; i--)
 {
  if (ch == str2[i])
   return(strlen2 - 1 - i);
  if ((ch != str2[i]) &&i == 0)
   returnstrlen2;
 }
}
                                             //horspool算法进行匹配增强
bool horspoolMatching(string st1, string st2)
{
 int i = strlen2 - 1;
 while(i < strlen1)
 {
  for(int k=0;k
  {
   if (str1[i-k]!= str2[strlen2 - 1 - k])
   {
    i= i+movelength(str1[i]);
    if(i >= strlen1)
     returnfalse;
    break;
    cout<< str1[i - k] << "和" << str2[strlen2 - 1 - k]<< "未匹配上!" << endl;
   }
   if((str1[i-k] == str2[strlen2 - 1 - k]) && (k == strlen2 -1))
    returntrue;
  }
 }
}
int main()
{
 cout << "请输入文本:" << endl;
 cin >> str1;
 strlen1 = size(str1);
 cout << "\n请输入模式:" << endl;
 cin >> str2;
 strlen2 = size(str2);
 bool result = horspoolMatching(str1, str2);
 cout << "\n匹配结果:";
 if (result)
  cout << "成功!\n";
 else
  cout << "失败!\n";
 cout << endl;
 return 0;
}
分享:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值