用kmp算法实现在一个网页内网址的提取,整个项目在这点击打开链接。只要把里边的kmpDlg.cpp文件了的部分内容用以下代码替换即可。

kmp算法无回溯的查找匹配串所在位置,效率更高·····

void CKmpDlg::OnButtonKmp()
{
 // TODO: Add your control notification handler code here

//参照CKmpDlg::OnButtonLink()函数,填写完整,将函数中Find函数部分皆改写为
 //KMP算法,提示:CString类型变量可通过下标引用单个字符元素,如m_EditResult[0],
 //m_EditResult.GetLength()可求串长度。
 CString m_sLink="";
 int i=1,j,k;
 i=IndexKMP(m_EditResult,"href",1);//定位href位置
 while(i>0)
 {
  j=IndexKMP(m_EditResult,"\"",i+4);  //定位href后第一个"位置
  if(j<=0)
   break;
  k=IndexKMP(m_EditResult,"\"",j+1);  //定位href后第二个"位置
  if(k<=0)
   break;
  m_sLink+=m_EditResult.Mid(j,k-j-1)+"\r\n";  //Mid为求子串函数,第一个参数j+1换成j才不会丢失第一个字符
  //m_sLink+="nihao";
  i=IndexKMP(m_EditResult,"href",k+1);
 }
    m_EditResult=m_sLink; 
 UpdateData(FALSE); 
}

int IndexKMP(CString S,CString T,int start)
{
 //填写KMP算法函数,包含求next部分
 //start为主串定位起始位置,即从start向后查找模式串
 int i=start;
 int j=1;
 int next[1000];
 GetNext(T,next);
 while (i<=S.GetLength()&&j<=T.GetLength()){
  if (j==0||S[i-1]==T[j-1]){//这已改变
   ++i;
   ++j;
  }
  else
   j=next[j]; 
 }
 if (j>T.GetLength()){
 return i-T.GetLength();
 } else
 return 0; 
}

void  GetNext(CString T,int next[])
{
 //填写求next函数
 int i=1;
 next[1]=0;
 int j=0;
 while (i<T.GetLength()){
  if (j==0||T[i]==T[j]){  
   ++i;
   ++j;
   next[i]=j;
  }else
   j=next[j];
 }
}

转载于:https://www.cnblogs.com/lixingle/archive/2012/11/03/3313017.html

解析网页(KMP算法实现部分)相关推荐

  1. 字符串 kmp算法解析

    kmp算法是用于解析字符串匹配的问题.给定两个字符串:第一个是文本串str,第二个是匹配串p.问str中最早有那个位置能完全和匹配串p匹配呢? 1. 暴力匹配 假设文本串的长度为n,匹配串的长度为m. ...

  2. 自研!东鸽用 Go 语言写了一个能够自动解析新闻网页的算法

    这是「进击的Coder」的第 593 篇技术分享 作者:韦世东 来源:NightTeam " 阅读本文大概需要 8 分钟. " 输入网页文本(不需要输入 xpath),自动结构化输 ...

  3. 【数据结构与算法】之深入解析KMP算法的核心原理和实战演练

    一.简介 ① 概念 KMP 算法是一种改进的字符串匹配算法,由 D.E.Knuth,J.H.Morris 和 V.R.Pratt 提出的,因此称它为克努特-莫里斯-普拉特操作,简称 KMP 算法. K ...

  4. c语言数据结构kmp中next计算,数据结构——关于KMP算法中next函数的详细解析

    以前看到数据结构中字符串的模式匹配时,花了半天的时间,才把KMP算法中的next函数整明白了,结果过了几天在看到这时,只记得next[j+1]=next[j]+1,但是有时候能套公式正确算出,有时候就 ...

  5. KMP算法模板与解析

    全部数据结构.算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360 将KMP算法,就要先讲讲它是用来 ...

  6. 【算法】KMP算法完全解析(C语言实现)

    ①KMP算法到底是用来干什么的? KMP算法所做的事情,就是在字符串中寻找子串.比如ilovecode这个字符串中,我们可以搜寻到love这个子串.但如果用回溯的暴力方法寻找子串(即两个for循环), ...

  7. POJ 3461 Oulipo(kmp算法解析)

    题目链接:https://cn.vjudge.net/contest/320014#problem/F Sample Input 3 BAPC BAPC AZA AZAZAZA VERDI AVERD ...

  8. KMP算法具体解释(转)

    作者:July. 出处:http://blog.csdn.net/v_JULY_v/. 引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树.后缀树,包含KMP算法,只有在解 ...

  9. (转)KMP算法原理讲解及模板C实现

    原作者:v_JULY_v 1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不 ...

最新文章

  1. bzoj 1233 or 3549
  2. css 边缘闪光_css文字渐变+内发光+投影效果
  3. SQL语句关键字执行顺序
  4. java中装饰器_Java设计模式12:装饰器模式
  5. java中月日年这种怎么转换成年月日_最“热乎”的Java社招面试经历分享(共40个面试题)...
  6. java package报错_Java基础知识总结 - 超详细篇(上)
  7. python计算股票趋势_通过机器学习的线性回归算法预测股票走势(用Python实现)...
  8. 选课网站html源码,选课系统网页制作(26页)-原创力文档
  9. 2021华为杯建模---总结
  10. c++:怎么将ctime时间转化为一个具体的秒数值_Linux下如何删除长时间不使用的旧文件?...
  11. Linux操作系统使用基础02:Linux系统安装与登陆
  12. webpack4导入全局sass文件
  13. HTML+CSS制作旋转的loading效果
  14. android multipartentity 怎么上传参数,android-通过MultipartEntityBuilder通过HTTP表单上传文件,并显示进度b...
  15. js知识梳理1:理解对象的属性特性
  16. python脚本调度程序_python任务调度实例分析
  17. OpenGL超级宝典(第7版)笔记1 清单的初始环境配置part1
  18. linux环境 下载Neo4j
  19. 敌兵布阵(CDQ分治模板题)
  20. 十大热门经典历史小说,大有希望获得第四届橙瓜网络文学奖

热门文章

  1. bilibili怎么用用户名登录_bilibili账号安全中心 | 手游网游页游攻略大全
  2. android uri转file_Android世界:ContentProvider使用
  3. golang超时控制
  4. hiberanate 主键查询慢_hibernate 新加数据 查询 缓存 变慢
  5. Linux指定jre运行jar包,Linux如何运行和停止jar包
  6. Spring main方法中怎么调用Dao层和Service层的方法
  7. yum提示Another app is currently holding the yum lock; waiting for it to exit...处理办法
  8. Linux报错问题:bash: vi: command not found
  9. Python——安装OpenCV2
  10. 微软公司软件开发模式简介