数据结构基础之串
来源:互联网 发布:乔治格文2k数据 编辑:程序博客网 时间:2024/06/05 03:28
串是由零个或多个字符组成的有限序列,可以认为是由字符组成的线性表
基本操作如下:
#define MaxLen 80typedef struct{//定义串的数据结构char str[MaxLen];int length;}SeqString;void StrAssign(SeqString *s,char cstr[]){//串的赋值int i;for(i=0;cstr[i]!='\0';i++){s->str[i]=sctr[i]; //常量cstr中的字符赋给s中}s->length=i;}int StrEmpty(SeqString s){//串为空返回1,if(s.length==0)return 1;elsereturn 0;}int StrLength(SeqString s){return s.length;//在StrAssign中已经记录了length的值}void StrCopy(SeqString *T,SeqString s){//串的复制操作int i;for(i=0;i<s.length;i++)T->str[i]=s.str[i];T->length=s.length;//字符串cstr及length都复制}int StrCompare(SeqString s,SeqString T){int i;for(i=0;(i<s.length)&&(i<T.length);i++)//取两者中的最小值if(s.str[i]!=T.str[i])return (s.str[i]-T.str[i])//若有不同,返回两个字符的差值return (s.length-T.length);//T为s的子串,返回相差的字母数}int StrInsert(SeqString *s,int pos,SeqString T){//串的插入,在s中插入T分为三种情况int i;if(pos<0||pos-1>s->length){printf("插入的位置不对");return 0;}if(s->length+T.length<=MaxLen)//情况1,子串插入后,总串长小于等于Maxlen{ //在插入之前,s中pos后的字符向后移动len个位置for(i=s->length+T.length-1;i>=pos+T.length-1;i--){s->str[i]=s->str[i-length];}//将T插入到s中for(i=0;i<T.length;i++){s->str[pos+i-1]=T.str[i];}s->length=s->length+T.length;return 0;}else if(pos+T.length<=MaxLen)//情况2,子串可以插入到s中,但s中的字符会被截掉{ //pos以后的后移for(i=MaxLen-1;i>T.length+pos-1;i--)s->str[i]=s->str[i-T.length];for(i=0;i<T.length;i++)s->str[pos+i-1]=T.str[i];s->length=MaxLen;return 0;}//情况3,子串T不能被完全插入到s中else{for(i=0;i<MaxLen-pos;i++)s->str[i+pos-1]=T.str[i];s->length=MaxLen;return 0;}}int StrDelete(SeqString *s,int pos,int len){//s中删除pos开始的len个字符int i;if(pos<0||len<0||pos+len-1>length){printf("删除位置不正确");return 0;}else//这里也可以根据位置细分{for(i=pos+len;i<=s->length-1;i++)s->str[i-len]=s->str[i];s->length=s->length-len;return 1;}}int StrConcat(SeqString *T,SeqString s){//串s接在串T的末尾int i ,flag;//情况1,连接后的总长度小于等于Maxlenif(T->length+s.length<=MaxLen){for(i=T->length;i<T->length+s->length;i++)T->str[i]=s.str[i-T->length];T->length=T->length+s.length;flag=1;}//情况2,连接后串长大于Maxlen,s部分连接在串T末尾else if(T->length<MaxLen){for(i=T->length;i<MaxLen;i++)T->str[i]=s.str[i-T->length];T->length=MaxLen;flag=0;}return flag;}void StrClear(SeqString *s){//清空串s->length=0;}
0 0
- 数据结构基础之串
- 数据结构基础之串
- Java基础之数据结构
- 基础数据结构之图
- 基础数据结构之队列
- 数据结构基础之单链表
- 数据结构基础 之 双链表
- 数据结构之基础篇
- 数据结构基础之单链表
- 数据结构基础之队列
- 数据结构基础之栈
- 数据结构基础之树
- 数据结构基础之队列
- 数据结构之基础概念
- openCV之基础数据结构
- 算法基础之基础数据结构
- 基础数据结构之图二
- python基础之基本数据结构
- C语言杂谈:指针与数组 (上)
- iOS 调试技巧
- [leetcode] 329. Longest Increasing Path in a Matrix 解题报告
- UVa 227 - Puzzle
- 蓝桥杯 十六进制转八进制
- 数据结构基础之串
- 解决maven管理Android项目时pom报错Unknown packaging: apk
- 被误解的MVC和被神化的MVVM
- 【解题报告】2015ACM/ICPC亚洲区长春站
- ckfinder 在上传图片后, ckeditor 获取图片路径时 多了个斜杠 如何解决呀?
- AsyncTask execute 那些事
- HDU2084 数塔 【DP问题】
- OD发包断点
- 重新定义团队 谷歌的自由精神对所有公司都适用