医疗科技网站建设,微信h5页面制作软件哪个好,网上哪个网站教做西点,seo有哪些作用返回目录#xff1a;Chilan Yu#xff1a;《数据结构》目录链接zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分#xff0c;而串值采用堆串存储方式存储#xff0c;串名用符号表存储。堆串存储方式#xff1a;这种存储方法以一组地址连续的存储单元存放串的字符…返回目录Chilan Yu《数据结构》目录链接zhuanlan.zhihu.com4.2.2 堆串字符串包括串名与串值两部分而串值采用堆串存储方式存储串名用符号表存储。堆串存储方式这种存储方法以一组地址连续的存储单元存放串的字符序列但它们的存储空间是在程序执行过程中动态分配的。系统将一个地址连续、容量很大的存储空间作为字符串的可用空间每当建立一个新串时系统就从这个空间中分配一个大小和字符串长度相同的空间存储新串的串值。串名符号表所有串名的存储映像构成一个符号表。借助此结构可以在串名和串值之间建立一个对应关系称为串名的存储映像。堆串的存储映象示例 aa programbstring cprocessfree23注意b中string后有一个空格堆串定义/*堆串的定义*/
typedef struct{char * ch;//位置指针指示串的起始地址int len;//串的长度
}HString;
1. 堆串赋值函数/*堆串赋值函数*/
void StrAssign(HString * s,char * tval){//将字符串常量tval的值赋给堆串sint len,i0;if(s-ch!NULL) free(s-ch);//如果堆串的起始位置指针有所指则释放空间while(tval[i]!0) i;//遍历一遍字符串常量tval得到其长度len i;if(len){//如果字符串常量tval长度不为0s-ch (char *)malloc(len);//开辟空间for(i0;ilen;i) s-ch[i] tval[i];//每个字符一一赋值}else s-ch NULL;//否则把堆串的起始位置指针指向NULLs-len len;//修改堆串长度
}
2. 堆串插入函数/*堆串插入函数*/
void StrInsert(HString * s,int pos,HString * t){//在串s中下标为pos的字符之前插入串tint i;char * temp;if(pos0 || poss-len || s-len0) return ;//插入位置不合法temp (char *)malloc(s-lent-len);for(i0;ipos;i) temp[i] s-ch[i];//先把s中在pos之前的字符复制到temp中for(i0;it-len;i) temp[ipos] t-ch[i];//再把t插入for(ipos;is-len;i) temp[it-len] s-ch[i];//最后把s中在pos之后的字符复制到temp中s-len t-len;//更新长度free(s-ch);//释放原来所指位置s-ch temp;//把起始位置指针指向新的位置
}
3. 堆串删除函数/*堆串删除函数*/
void StrDelete(HString * s,int pos,int len){//在串s中删除从序号pos起len个字符int i;char * temp;if(pos0 || pos(s-len-len)) return ;temp (char *)malloc(s-len-len);for(i0;ipos;i) temp[i] s-ch[i];for(ipos;is-len-len;i) temp[i] s-ch[ilen];s-len s-len-len;free(s-ch);s-ch temp;
}
4. 堆串复制函数/*堆串复制函数*/
void StrCopy(HString * s,HString t){//将串t的值复制到串s中int i;s-ch (char *)malloc(t.len);for(i0;it.len;i)s-ch[i] t.ch[i];s-len t.len;
}
5. 判空函数/*判空函数*/
int StrEmpty(HString s){//若串s为空(即串长为0)则返回1否则返回0if(s.len0) return 1;else return 0;
}
6. 堆串比较函数/*堆串比较函数*/
int StrCompare(HString s,HString t){//若串s和t相等则返回0若st返回1若st返回-1int i;for(i0;is.len it.len;i)if(s.ch[i]!t.ch[i])return(s.ch[i]-t.ch[i]);return(s.len-t.len);
}
7. 求串长函数/*求串长函数*/
int StrLength(HString s){//返回串s的长度return s.len;
}
8. 清空函数/*清空函数*/
void StrClear(HString * s){//将串s置为空串if(s-ch!NULL) free(s-ch);s-ch NULL;s-len 0;
}
9. 连接函数/*连接函数*/
void StrCat(HString * s,HString t){//将串t联接在串s的后面int i;char * temp;temp (char *)malloc(s-lent.len);for(i0;is-len;i)temp[i] s-ch[i];for(is-len;is-lent.len;i)temp[i] t.ch[i-s-len];s-len t.len;free(s-ch);s-ch temp;
}
10. 求子串函数/*求子串函数*/
void SubString(HString * sub,HString s,int pos,int len){//将串s中序号pos起len个字符复制到sub中int i;if(sub-ch!NULL) free(sub-ch);if(pos0 || poss.len || len1 || lens.len-pos){sub-ch NULL;sub-len 0;return;}else{sub-ch (char *)malloc(len);for(i0;ilen;i)sub-ch[i] s.ch[ipos];sub-len len;}
}
11. 定位函数/*定位函数*/
int StrIndex(HString s,int pos,HString t){//求串t在串s中的位置int i,j;if(s.len0 || t.len0) return 0;i pos;j 0;while(is.len jt.len)if(s.ch[i]t.ch[j]){i;j;}else{i i-j1;j 0;}if(jt.len) return i-j;else return 0;
}
返回目录Chilan Yu《数据结构》目录链接zhuanlan.zhihu.com