数据结构顺序字符串(插入、删除、查找、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); }

 

posted @ 2019-05-21 23:58  吕志琪  阅读(1147)  评论(0编辑  收藏  举报