串之顺序串算法
来源:互联网 发布:大数据现在好找工作么 编辑:程序博客网 时间:2024/06/06 20:48
#include<stdio.h>#include<stdlib.h>#include<string.h> #define maxsize 100typedef struct{ char data[maxsize]; int length;}seqString;typedef struct{ char ch; int count;}chh;//创建串的算法(将一个字符串常量赋给str)void creat(seqString str,char ch[]){ int i; for(i=0;ch[i]!='\0';i++) { str.data[i]=ch[i]; } str.length=i; } //求串的长度int getLength(seqString str){ return str.length; } //串的复制 (将t复制给S)void strCopy(seqString s,seqString t){ int i; for(i=0;i<t.length;i++) { s.data[i]=t.data[i]; } s.length=t.length;}//串连接(不修改s,t)seqString getChat(seqString s,seqString t){ int i; seqString str; str.length=s.length+t.length; for(i=0;i<s.length;i++) { str.data[i]=s.data[i]; } for(i=0;i<t.length;i++) { str.data[i+s.length]=t.data[i]; } return str; } //串连接,考虑空间是否够用seqString *concat(seqString s1,seqString s2){ seqString *r; int i; if(s1.length+s2.length>maxsize-1) { printf("cannot cancat!"); return NULL; } else { r=(seqString*)malloc(sizeof(seqString)); for(i=0;i<s1.length;i++) { r->data[i]=s1.data[i]; } for(i=0;i<s2.length;i++) { r->data[s1.length+i]=s2.data[i]; } r->data[r->length]='\0'; r->length=s1.length+s2.length; } return r; } //求子串seqString subString(seqString str,int i,int len){ int k; seqString *s; if(i<0||i>str.length||i+len-1>str.length) { printf("error!"); } else { s=(seqString*)malloc(sizeof(seqString)); for(k=0;k<len;k++) { s->data[k]=str.data[i+k-1];//复制子串到S中 } s->length=len; s->data[s->length]='\0'; } }//求子串seqString substring(seqString s,int i,int len){ seqString str; int k; str.length=0; if(i<0||i>s.length||i+len-1>s.length) { return str; } for(k=0;k<len;k++) { str.data[k]=s.data[i+k-1]; } str.length=len; return str; }///串插入1seqString insertString(seqString s,int i,seqString t)//在s串第i个位置插入t { seqString str; int j; str.length=0; if(i<0||i>s.length+1) { return str; } for(j=0;j<i-1;j++) { str.data[j]=s.data[j];//将S元素[0……i-1]存放到str中 } for(j=0;j<t.length;j++) { str.data[i+j-1]=t.data[j];//将t元素存放到str中 } for(j=i-1;j<s.length;j++) { str.data[t.length+j]=s.data[j];//将s元素[i-1,……s.length-1]存放到Str中 } str.length=s.length+t.length; return str; }//串插入2seqString insertstring(seqString *s,int i,seqString t){ int k; if(i<0||i>s->length||s->length+t.length>maxsize-1) { printf("cannot insert!"); } else { for(k=s->length-1;k>i-1;k--) { s->data[s->length+k]=t.data[k];//s从第i个元素开始后移 } for(k=0;k<t.length;k++) { s->data[i+k-1]=t.data[k];//从第i个位置开始插入t } s->length=s->length+k; s->data[s->length]='\0'; } }//删除子串seqString deleteString(seqString s,int i,int j)//删除从第i个字符开始长度为j的子串 { seqString str; int k; str.length=0; if(i<0||i>s.length||i+j>s.length+1) { return str;//null } for(k=0;k<i-1;k++) { str.data[k]=s.data[k];//将s.data[0,……i-2]复制到str中 } for(k=i+j-1;k<s.length;k++) { str.data[k-j]=s.data[k];//将s.data[i+j-1,……,s.length-1]复制到str中 } s.length=s.length-j; return str; }//打印子串void print(seqString s){ int i=0; if(s.length>0) { for(i=0;i<s.length;i++) { printf("%c",s.data[i]); } printf("\n"); } }//求每个字符出现的次数int count(seqString s,chh C[]) { int i,j,n=0; for(i=0;i<s.length;i++) { for(j=0;j<=n;j++) { if(C[j].ch==s.data[i]) { C[j].count++; break; } } if(j>n) { C[n].ch=s.data[i];//若未找到,在C中增加一个元素 C[n].count=1; n++; } } return n;}//从第i个字符开始的j个字符串用字符串t代替 seqString replace(seqString s,int i,int j,seqString t) { int k; seqString str; str.length=0; if(i<=0||i>s.length||i+j-1>s.length) { return str; } for(k=0;k<i-1;k++) { str.data[k]=s.data[k]; } for(k=0;k<t.length;k++) { str.data[i+k-1]=t.data[k]; } for(k=i+j-1;k<s.length;k++) { s.data[t.length+k-j]=s.data[k]; } str.length=s.length-j+t.length; return str; } //将字符串中所有字符x替换成yvoid replace1(seqString s,char x, char y){ int i; for(i=0;i<s.length;i++) { if(s.data[i]==x) { s.data[i]=y; } } }//比较两个串s t 的大小int strcmp1(seqString s,seqString t){ int i,comlen; if(s.length<t.length) { comlen=s.length;//求共同长度 } else { comlen=t.length; } for(i=0;i<comlen;i++)//在共同长度内逐个字符比较 { if(s.data[i]>t.data[i]) { return 1; } else if(s.data[i]<t.data[i]) { return -1; } } if(s.length==t.length) { return 0; } else if(s.length>t.length) { return 1; } else { return -1; } }
阅读全文
0 0
- 串之顺序串算法
- 算法与数据结构之顺序串
- 顺序串算法
- 顺序串算法2
- 顺序串算法
- 顺序串算法
- 顺序串算法
- 顺序串算法
- 算法入门之串的顺序存储表示
- 数据结构之自建算法库——顺序串
- 第八周--顺序串算法
- 项目3 -- 顺序串算法
- 项目3 -- 顺序串算法
- 第八周 顺序串算法
- 第八周 顺序串算法
- 第八周 顺序串算法
- 8周 顺序串算法
- 算法之动态顺序统计
- 关于VS2017配置GLFW的问题
- React学习笔记_常用工具 插件使用
- 存储函数
- java读取excle文件内容示例
- 数量不定的模板参数、auto、for的新形式、reference
- 串之顺序串算法
- 使用Junit和hamcrest包进行单元测试
- Spark和Hbase环境变量冲突解决办法
- 1135. Is It A Red-Black Tree (30)
- codeforces 58A Chat room
- 0-1背包
- QueryRunner工具类用法和8种结果集
- 【java】输入数组、数组排序及查找数组位置
- STM32