数据结构顺序字符串(插入删除查找BF模式匹配)
Posted lvzhiqi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构顺序字符串(插入删除查找BF模式匹配)相关的知识,希望对你有一定的参考价值。
插入元素输出之后变成了矩形框架或者变成了汉字,表示自闭了
#include<stdio.h> #include<stdlib.h> #define maxSize 100 //串字符数组最大长度 typedef struct{ char ch[maxSize]; //顺序串的存储数组 int length; //顺序串的实际长度 }SeqString; //初始化字符串 void createSeqString(SeqString &s){ s.length=0; } //给字符串赋值 void inputSeqString(SeqString &s){ int i=0; char ch1; printf("请输入字符串s(输入#结束):\n"); while ((ch1=getchar())!=‘#‘){ s.ch[i]=ch1; i++; } s.ch[i]=‘\0‘; s.length=i; } //输出长度 int LengthSeqString(SeqString &s){ return s.length; } //输出字符串 void printSeqString(SeqString &s) { for(int i=0;i<s.length;i++){ printf("%c",s.ch[i]); } printf("\n"); } //复制字符串 void copySeqString(SeqString &s,SeqString &t){ int i,j;//i表示开始复制的位置,j表示复制个数 printf("请输入复制开始位置i:"); scanf("%d",&i); printf("请输入复制的个数j:"); scanf("%d",&j); int k=1,n,x=i-1; if(i<1||i>s.length||j<1||j>s.length) printf("错误!"); else{ for(n=0;n<j;n++,x++){ t.ch[n]=s.ch[x]; k++; } } t.length=k; printf("字符串的t的内容为:"); printSeqString(t); } //判断两个字符串的大小 int sizeSeqString (SeqString &s,SeqString &t){ for(int i=0,j=0;i<s.length,j<t.length;i++,j++){ if(s.ch[i]>t.ch[j]) return 1; if(s.ch[i]==t.ch[j]) return 0; if(s.ch[i]<t.ch[j]) return -1; } } //两个字符串连接 void concatSeqString(SeqString &s,SeqString &t){ SeqString s1; int i,j; for(i=0;i<s.length;i++){ s1.ch[i]=s.ch[i]; } for(i=s.length,j=0;j<t.length;j++){ s1.ch[i+j]=t.ch[j]; } s1.ch[i+j]=‘\0‘; s1.length=s.length+t.length; printf("两个字符串连接之后s1的长度为:%d\n",s1.length); printf("字符串的s1的内容为:"); printSeqString(s1); } //查找在串s的第i个位置开始的j个字符组成的串 void subSeqString(SeqString &s){ SeqString s2; int i,j;//i表示开始的位置,j表示个数 printf("请输入查找开始位置i:"); scanf("%d",&i); printf("请输入个数j:"); scanf("%d",&j); int k=0; if(i<1||i>s.length||j<1||j>s.length) printf("错误!"); for(k;k<j;k++){ s2.ch[k]=s.ch[i-1+k]; } s2.length=j; printf("子串s2的长度为:%d\n",s2.length); printf("字符串的s2的内容为:"); printSeqString(s2); } //插入子串s5于主串s中 void InSeqString (SeqString &s){ SeqString s2; int i,j;//i表示开始的位置,j表示个数 printf("请输入插入开始位置i:"); scanf("%d",&i); int a[s.length-i+1]; for(int n=0;n<s.length-i+1;n++){ a[n]=s.ch[n+i-1]; } for(int n=0;n<s2.length;n++){ s.ch[n+i-1]=s2.ch[n]; } for(int n=0;n<s.length-i+1;n++){ s.ch[i+j-1+n]=a[n]; } s.length=s.length+j; printf("将a插在s的第%d个位置构成的字符串为:",i); printSeqString(s); } //删除串s中第i个位置开始的j个字符串 void DelSeqString(SeqString &s){ SeqString s3; int i,j;//i表示开始的位置,j表示个数 printf("请输入删除开始位置i:"); scanf("%d",&i); printf("请输入个数j:"); scanf("%d",&j); int k=0; if(i<1||i>s.length||j<1||j>s.length) printf("错误!"); s.length=s.length-j; for(int n=i;n<=s.length;n++){ s.ch[n-1]=s.ch[n+j-1]; } printf("删除第%d个位置的%d个字符之后组成新的字符串为:",i,j); printSeqString(s); } //返回子串s4在主串s中的位置(BF匹配模式) int IndexSeqString (SeqString &s){ SeqString s4; int i,j,k; char ch4; printf("请输入字符串s(输入#结束):\n"); while ((ch4=getchar())!=‘#‘){ s4.ch[i]=ch4; i++; } s4.ch[i]=‘\0‘; s4.length=i; for(int i=0;i<s.length-s4.length;i++){ for(k=i,j=0;j<s4.length;k++,j++) if(s.ch[k]!=s4.ch[j]) break; if(j==s4.length) printf("shi %d sdzifuchuan",i); } return -1; } main(){ SeqString s; SeqString t; int k; createSeqString(s); inputSeqString(s); printf("s字符串的长度:%d\n",s.length); printf("字符串的s的内容为:"); printSeqString(s); copySeqString(s,t); printf("t字符串的长度:%d\n",t.length); sizeSeqString(s,t); concatSeqString(s,t); subSeqString(s); InSeqString(s); DelSeqString(s); IndexSeqString(s); }
以上是关于数据结构顺序字符串(插入删除查找BF模式匹配)的主要内容,如果未能解决你的问题,请参考以下文章
常用算法3 - 字符串查找/模式匹配算法(BF & KMP算法)
Python数据结构:BF算法匹配括号回文链表生成螺旋矩阵移除列表元素计算后缀表达式的值顺时针旋转n维矩阵90度折半查找