每日一练--C语言--串
目标
实现串的经典模式匹配算法与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语言--串的更多相关文章
- 每日一小练——Eratosthenes 筛选法
上得厅堂.下得厨房,写得代码.翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Eratosthenes筛选法 内容: 求质数是一个非常普遍的问题,通常不外乎用数去除.除到不尽时,给定的数就是质数.可是 ...
- 每日一小练——高速Fibonacci数算法
上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...
- WindowsAPI每日一练(1) MessageBoxA
WindowsAPI每日一练系列 :https://www.cnblogs.com/LexMoon/category/1246238.html WindowsAPI每日一练(1) WinMain 要跟 ...
- 每日一小练——Armstrong数
上得厅堂.下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:Armstrong数 内容: 在三位的正整数中,比如abc.有一些能够满足a^3+b^3+c^3=abc的条件,也就是说各 ...
- C语言 串 顺序结构 实现
一个能够自动扩容的顺序结构的串 ArrString (GCC编译). /** * @brief C语言 串 顺序结构 实现 * @author wid * @date 2013-11-01 * * @ ...
- CSS3每日一练之内容处理-嵌套编号
出处:http://www.w3cfuns.com/thread-5592229-1-17.html 1.大标题一 1.子标题 2.子标题 3.子标题2.大标题二 1.子标题 2. ...
- CSS3每日一练之选择器-结构性伪类选择器
<!DOCTYPE HTML> <html> <head> <meta charset="gb2312"> <title> ...
- HTML5每日一练之progress标签的应用
progress标签:从名字上来看,估计大家也能猜到这个标签是什么标签了,没错,他是一个进度条.在HTML5中我们终于可以不用模拟了. <progress id="W3Cfuns_pr ...
- HTML5每日一练之figure新标签的应用
igure元素是一种元素的组合,可带有标题(可选).figure标签用来表示网页上一块独立的内容,将其从网页上移除后不会对网页上的其他内容产生影响.figure所表示的内容可以是图片.统计图或代码示例 ...
随机推荐
- android 图片叠加效果——两种方法
效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Can ...
- maven的版本管理笔记
1. 版本管理 (1) 快照版本对应了项目的开发过程,往往对应了很长的时间:发布版本对应了项目的发布,因此仅仅代表某个时刻项目的状态. (2) 理想的发布版本应当对应项目某个时刻比较稳定的状态,包括源 ...
- ORA-01810: 格式代码出现两次
今天在修改SQL语句的时候遇到这个小问题,提示的还是比较明显的,当然解决之道我是从百度上摘取的! 错误语句段:AND V.UPLOAD_DATE <=TO_DATE ('2013-11-11 2 ...
- line-height的小技巧
CSS中的line-height属性控制着文字的行间距离.通常被设置为一个无单位的值(例如:line-height:1.4),与文字尺寸是成比例的.它是排版中的一个重要的属性.太低了文字会挤在一起,太 ...
- 常用思科设备图标(JPG+矢量图)
常用思科设备图标 在制作网络拓扑图示时我们利用MS Visio或亿图图示等制图软件自带的网络设备绘制拓扑图感觉提供的设备图标非常有限,往往不满足我们的要求,这时就常需要找一些思科的设备图标,在网上到处 ...
- H264转成RGB24格式-2016.01.21
#include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #include "l ...
- css兼容
1.不同浏览器默认边距不同,必须对body自定义:margin:0;padding:0; 2.margin.padding属性值为%时,不是所有浏览器都支持: 3.transparent属性,IE7之 ...
- 010GCC程序编译
1.GCC的特点: Gcc(GUN C Compiler)是GUN推出的功能强大.性能优越的多平台编译器,是GUN的代表作制衣.GCC可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比 ...
- C#处理Excel
C#处理Excel C#处理Excel 前言 OleDb 具体操作 NPOI 具体操作 Excel C# NPOI OleDb 前言 最近需要对Excel进行加密解密操作,本身是一个简单的事情,通过 ...
- MAC OS下免费下载YouTube
YouTube上有很多不错的视频,你感兴趣的视频除了可以加入自己播放列表之外,还可以将其下载到本地收藏起来.推荐这款软件“Xilisoft Download YouTube Video for Mac ...