数据结构之定长字符串的输入,比较,字符匹配
来源:互联网 发布:卡普顿大学知乎 编辑:程序博客网 时间:2024/06/08 17:50
本文章写的是数据结构之定长字符串的实现
定长字符串
数据结构定义为
#define maxsize 256
typedef char SString[maxsize+1];
s[0]保存串的长度
#include<stdio.h>#include<string.h>#include<string>#include<cmath>#include<algorithm>#include<iostream>using namespace std;#define OK 1#define ERROR 0typedef int status;#define maxsize 256typedef char SString[maxsize+1];/*定长字符串这种字符串的是s[0]保存着字符串的长度*/int strLength(SString s)//返回是字符长{ return s[0];}int strCompare(SString s,SString t)//若两字符串相等就返回0,否则返回ascill码的差值,{//需要注意的是若两字符串不等长,但短的都能与长的匹配,那么就返回长度差 int i,j; for(i=1; i<=s[0]&&i<=t[0]; i++) { if(s[i]!=t[i])return s[i]-t[i]; } return s[0]-t[0];}int next[100];int index(SString s,SString t,int pos)//字符匹配之朴素匹配法{ int i,j; i=pos; if(pos<1||pos>s[0])return ERROR; j=1; while(i<=s[0]&&j<=t[0]) { if(s[i]==t[j]) { i++; j++; } else { i=i-j+2;//(i-j+1)+1,i-j+1是开始匹配的位置,当模式串失配时,要从后一个位置开始匹配即(i-j+1)+1 j=1; } } if(j>t[0])return i-t[0]; else return 0;}int index_kmp(SString s,SString t,int pos)//kmp算法{ int i,j,k; i=pos; if(pos<1||pos>s[0])return ERROR;//定长顺序字符串从下标为1的位置开始存储 j=1; while(j<=t[0]&&i<=s[0]) { if(j==0||t[j]==s[i]) { j++; i++; } else j=next[j]; } if(j>t[0])return i-t[0]; else return 0;}int get_next(SString t){ int i,j; i=1; j=0; next[1]=0; while(i<t[0]) { if(j==0||t[j]==t[i]) { i++; j++; next[i]=j; } else j=next[j]; }}void strInput(SString &s)//因为定长顺序字符串的首位置保存的是字符串的长度,故用专门的输入函数来输入这种字符串{ int i=1,j,k; char ch; while(scanf("%c",&ch)!=EOF&&ch!='\n') { s[i]=ch; i++; } s[0]=i-1; s[i]='\0';}int main(){ int i,j,k;// char ss[]= {8,'a','b','a','a','b','c','a','c'}; SString s,t; strInput(s); strInput(t);// printf("%d",s[0]); // printf("%d",strCompare(s,t));// for(i=1; i<=s[0]; i++)// printf("%c",s[i]); get_next(t);// for(i=1; i<=t[0]; i++)// printf("%d ",next[i]); printf("%d",index_kmp(s,t,1));// printf("%d\n",index(s,t,1)); return 0;}/*abaabcacABCDEABCCABCDEFGDEF*/
阅读全文
0 0
- 数据结构之定长字符串的输入,比较,字符匹配
- 数据结构实验之栈四:括号匹配+(字符串中空格的输入)
- 数据结构之字符串的模式匹配
- 数组字符串系列之:判断一个输入字符串中的每个字符唯一,只能使用基本的数据结构
- 数据结构示例之字符串比较
- 数据结构面试之十四——字符串的模式匹配
- java数据结构之字符串的模式匹配算法
- 数据结构线性表之定长顺序表
- 强化练习9:将不定长的字符串转化为一个16位的字符数组
- 数据结构 字符串模式匹配之KMP算法
- 数据结构 字符串模式匹配之BF算法
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 数据结构实验之串二:字符串匹配
- 没落的“贵族”:那些年,我们一起玩过的HTC经典机型
- 如何修改PKG_CONFIG_PATH环境变量
- 微信、淘宝、京东等10家公司 联合签署个人信息保护倡议书
- 计算机网络第4章 网络层(下)
- 简易计算器第一版
- 数据结构之定长字符串的输入,比较,字符匹配
- C语言经典代码(1-8)
- 详解4字节对齐
- 原型模式学习和思考
- ehcache详解,配置和使用
- 拿好你的iPhone8,因为你真的摔不起
- Uber在伦敦运营执照被吊销,竞争对手 mytaxi 宣布立刻打折
- 传华为荣耀原总裁、酷派前CEO刘江峰 投资Kaadas凯迪仕
- 使用 Task.Wait()?立刻死锁(deadlock)