413字符串的存储及其实现 1、串的顺序存储及其部分运算的实现 串的顺序存储使用数组存放,具体类型定义如下 #define maxsize 100 typedef struct t char str[MAXSIZE] int length 3 seqstring;
4.1.3 字符串的存储及其实现 1、串的顺序存储及其部分运算的实现 串的顺序存储使用数组存放,具体类型定义如下: #define MAXSIZE 100 typedef struct { char str[MAXSIZE]; int length ; } seqstring;
(1)插入运算 strinsert(s,T void strinsert(seqstring"S, int i, seqstring T) i int k if (i<1i>s->length+1 S->length Tlength> MAXSIZE printf( connot insertin) else for(k-S->length-l; k>=i-1; k--) S->strITlength+k]=S->str[k: for(k=0; k<Tlength; k++) ->stri+k-1=Tstr; S->length=S->length Tlength: S->strIS->length=0;
(1)插入运算strinsert(S,i,T) void strinsert(seqstring *S, int i , seqstring T) { int k; if (i<1 || i>S->length+1 || S->length + T.length>MAXSIZE) printf("connot insert\n“); else { for(k=S->length-1;k>=i-1;k--) S->str[T.length+k]=S->str[k]; for (k=0;k<T.length;k++) S->str[i+k-1]=T.str[k]; S->length= S->length + T.length; S->str[S->length]=‘\0’; } }
(2)删除运算 streete(Sien) void strdelete(seqstring *S, int i, int len) i int k if (i<1 i>S->length+len-1>S->length) printf(" cannot delete\n"). else for(k=i+len-l; k<S->length; k++) s->str[k-len]= S->str[kI S->length=S->length-len S->str[S->length]= \0
(2)删除运算strdelete(S,i,len) void strdelete(seqstring *S,int i,int len) { int k ; if (i<1 || i>S->length||i+len-1>S->length) printf(“ cannot delete\n”); else { for(k=i+len-1; k<S->length;k++) S->str[k-len]= S->str[k]; S->length=S->length-len; S->str[S->length]=‘\0’; } }
(3)连接运算 strconcat(S1S2 seqstring x strconcat(seqstring Sl, seqstring $2) i int i; seqstring x if (sIlength+S2.length>MAXSIZE) &( cannot concat"); return(NULL); else dr(seqstring )malloc(sizeof(seqstring)); for (i=0; i<SIlength; i++)r>str= sIstril; for(i=0; i<S2. length; i++) r->strI SIlength+il= S2.stril; r->length= SIlength+ s2.length r->str[r-length=0; return(r
(3)连接运算strconcat(S1 ,S2 ) seqstring * strconcat(seqstring S1,seqstring S2) { int i; seqstring *r; if (S1.length+S2.length>MAXSIZE) { printf("cannot concate"); return(NULL);} else { r=(seqstring*)malloc (sizeof(seqstring)); for (i=0; i<S1.length;i++) r->str[i]= S1.str[i]; for (i=0; i<S2.length;i++) r->str[ S1.length+i]= S2.str[i]; r->length= S1.length+ S2.length; r->str[r->length]='\0'; } return (r); }
(4)求子串运算 substring(s,ilen) seqstring *substring(seqstring s, int i, int len i int k; seqstring *r, if(i<l‖ i>Slength‖li+len-1> Slength) i printf( errorin); return(NULL) else (seqstring%)malloc(sizeof(seqstring)); for(k0; k<len; k++) r->str[k= Sstri+k-1; r->length=len r->str r->length=0 return(r)
(4)求子串运算substring(S,i,len) seqstring *substring(seqstring S,int i, int len) { int k; seqstring *r; if (i<1 || i>S.length || i+len-1>S.length) { printf(“error\n”); return(NULL);} else { r=(seqstring*) malloc (sizeof(seqstring)); for(k=0;k<len;k++) r->str[k]= S.str[i+k-1]; r->length=len; r->str[r->length]='\0'; } return(r); }