目标

实现串的经典模式匹配算法与KMP算法。

简述

自定义串结构;

串采用定长顺序存储结构,串从下标1开始存储,0下标存储串的实际长度;

匹配成功返回匹配位置,匹配失败返回0。

#include <stdio.h>

#define MAXLENTH 255

typedef unsigned char String[MAXLENTH+1];	//0下标存储字符串长度

int Index(String,String,int);
int Index_KMP(String,String,int,int *); int main()
{ int i,j; String S=" abcdabcabcdeaabcaacccceeeeacdbcd"; //开头空格为跳过下标0赋值
S[0]=sizeof(" abcdabcabcdeaabcaacccceeeeacdbcd")-2;
String T=" abca";
T[0]=sizeof(" abca")-2; int Next[T[0]+1];
Next[0]=0; i=Index(S,T,1);
j=Index_KMP(S,T,1,Next); printf("The Index function return %d.\n",i);
printf("The Index_KMP function return %d.\n",j);
return 0;
} int Index(String S,String T,int pos)
{
int i=pos,j=1;
while(i<=S[0]&&j<=T[0]){
if(S[i]==T[j]){
i++;
j++;
}else{
i=i-j+2;
j=1;
}
}
if(j>T[0])
return i-j+1;
else
return 0;
} int Index_KMP(String S,String T,int pos,int *Next) //用Next[0]标志是否已生成所需Next数组
{
int i,j;
if(!Next[0]){
i=1;
j=0;
Next[1]=0;
while(i<T[0]){
if(j==0||T[i]==T[j]){
i++;
j++;
if(T[i]==T[j])
Next[i]=Next[j];
else
Next[i]=j;
}else
j=Next[j];
}
if(i>=T[0])
Next[0]=1;
}
i=pos,j=1;
while(i<=S[0]&&j<=T[0]){
if(j==0||S[i]==T[j]){
i++;
j++;
}else{
j=Next[j];
}
}
if(j>T[0])
return i-j+1;
else
return 0;
}

每日一练--C语言--串的更多相关文章

  1. 每日一小练——Eratosthenes 筛选法

    上得厅堂.下得厨房,写得代码.翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Eratosthenes筛选法 内容: 求质数是一个非常普遍的问题,通常不外乎用数去除.除到不尽时,给定的数就是质数.可是 ...

  2. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  3. WindowsAPI每日一练(1) MessageBoxA

    WindowsAPI每日一练系列 :https://www.cnblogs.com/LexMoon/category/1246238.html WindowsAPI每日一练(1) WinMain 要跟 ...

  4. 每日一小练——Armstrong数

    上得厅堂.下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Armstrong数 内容: 在三位的正整数中,比如abc.有一些能够满足a^3+b^3+c^3=abc的条件,也就是说各 ...

  5. C语言 串 顺序结构 实现

    一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...

  6. CSS3每日一练之内容处理-嵌套编号

    出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一   1.子标题   2.子标题   3.子标题2.大标题二   1.子标题   2. ...

  7. CSS3每日一练之选择器-结构性伪类选择器

    <!DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <title> ...

  8. HTML5每日一练之progress标签的应用

    progress标签:从名字上来看,估计大家也能猜到这个标签是什么标签了,没错,他是一个进度条.在HTML5中我们终于可以不用模拟了. <progress id="W3Cfuns_pr ...

  9. HTML5每日一练之figure新标签的应用

    igure元素是一种元素的组合,可带有标题(可选).figure标签用来表示网页上一块独立的内容,将其从网页上移除后不会对网页上的其他内容产生影响.figure所表示的内容可以是图片.统计图或代码示例 ...

随机推荐

  1. Android打造带透明圆弧的ImageView

    这几天因为项目需求,需要在ImageView上面叠加一层透明圆弧,并且在沿着圆弧的方向显示相应的文字,效果如下图所示: 拿到这个需求,首先想到的是自定义一个ImageView来实现此功能,即在onDr ...

  2. Win2D 官方文章系列翻译 - 幕后绘制

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-offscreen-drawing/ 应用有时需要将图形绘制到并不立即显示的目标上.此类绘制动作被称作“幕后绘 ...

  3. 单链表(c++)

    #include "stdafx.h"#include <iostream>using namespace std;const int MaxSize = 100; c ...

  4. Mac 平台下功能强大的Shimo软件使用指南

    年初自从换了MAC工作站后,彻底享受了Apple产品给我们带来的完美体验,可能是刚转过来不适应,在访问网络设备时觉得远程连接不方便,例如ssh,vpn登陆都不是很方便,后来又安装了openvpnfor ...

  5. ZoneMinder配置与使用

    ZoneMinder是一套基于Linux操作系统的摄像机的视像数据监控的应用软件.应用范围广泛,包括商业或家居防盗等.ZoneMinder支持单一或多台视像镜头应用,包括摄取.分析.记录.和监视来源, ...

  6. biji001

    指针对变量使对指向变量的指针&运算符产生,对指针使用*运算符则可以返回到原始变量只要p指向i,那么*p就是i的别名*p不仅仅拥有和i同样的值,而且对*p的改变i的值*p左值,对它赋值合法*p ...

  7. asp.net ashx 一般处理程序 使用async await异步直接 copy可用哦

    以前一直很懒  碰到ashx要用await异步就绕开  用aspx  或者mvc异步控制器  这次公司需要  我查了国内的文章基本都不能简单copy来处理一堆错关键的过程中函数BeginProcess ...

  8. ASP.NET的SEO:使用.ashx文件——排除重复内容

    本系列目录 不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为"重复内容",如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高.所以我们应尽量避免各种重复内 ...

  9. VS2010 C++ 操作Excel表格的编程实现

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

  10. angular directive指令相互独立

    想要让指令的使用相互间不干扰,如下: