413字符串的存储及其实现 1、串的顺序存储及其部分运算的实现 串的顺序存储使用数组存放,具体类型定义如下: #define maXsize 100 typedef struct char str[MaXsizel: int length 3 setstring;
4.1.3 字符串的存储及其实现 1、串的顺序存储及其部分运算的实现 串的顺序存储使用数组存放,具体类型定义如下: #define MAXSIZE 100 typedef struct { char str[MAXSIZE]; int length ; } seqstring;
(1)插入运算 strinsert(s,iT) void strinsert(seqstring *S, int i, seqstring T) i int k if (i<1 i>S->length+1 s->length Tlength>MAXSIZE printf(" connot insertIn); else for(k=S->length-l; k>=i-1; k--) S->str Tlength+k=S->str(k; for (k=0; k<Tlength; k++ S->stri+k-1FTstr[k >length= s->length Tlength S->strIS->length =10
(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)删除运算 strdelete( s|en) void strdelete(segstring *S, int i,int len) i int k if (i<1 i>S->lengthl i+len-1>S->length) printf( cannot delete\n"); else for (k=i+len-l; k<S->length; k++) S->str[k-len]= S->str[kl S->length =S->length-len S->str[S->length]=t0
(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(S1S seqstring strconcat(seqstring sl, seqstring $2) int i; segstril Ing sk if(sIlength+S2,length>MAXSIZE i printf("cannot concat); return NULL) else &r(seqstring* )malloc(sizeof(seqstring); for(i=0; K<S1. length; i++)r->str= SIstri for (i=0; i<S2, length; i++) r->strI s1length+i]= S2 stril: r->length= SI length+ S2. length; r->strIr->length =10; 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)求子串运算 ubstring(s, i, len) seqstring * substring(seqstring s, int i, int len i int k; seqstring if(i<1‖i> S length‖i+len-l>S. length i printf( errorIn"); return nUll) ese i r(seqstring*) malloc(sizeof(seqstring)); for(k=0; k<len; k++) r->str[k=Sstri+k-1; r->length=len r->strlr->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); }