千家信息网

C语言的堆串实例操作分析

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
千家信息网最后更新 2024年09月22日C语言的堆串实例操作分析

今天小编给大家分享一下C语言的堆串实例操作分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、堆串概念

与定长顺序穿的存储结构类似,都是用一组地址连续的存储单元存储串的字符序列,不同的是堆串的存储空间是动态分配的,只要存储空间分配成功,就不会担心串在插入或者连接时候出现截断的情况。

malloc(),free(),realloc() 这三个函数用来对动态存储进行操作。

二、基本操作

#include#include#include#define false 0#define true 1typedef struct {        char *ch;    //字符数组,若是非空则指向起始地址,若为空则NULL         int len;   //长度 }HString;//初始化int HInit(HString *s){        s->ch=NULL;        s->len=0;} //串赋值int HStrAssign(HString *s,const char *chars){        int i=0;        while(chars[i]!='\0'){    //确定串长                 i++;        }        s->len=i;        if(s->ch!=NULL){                free(s);        }else{                s->ch=(char *)malloc((s->len+1)*sizeof(char));//0号单元不用                if(s==NULL){                        printf("空间申请失败!");                        return false;                }         for( i=1;i<=s->len;i++){   //依次赋值                 s->ch[i]=chars[i-1];        }        }}//串遍历int HSbianli(HString *s){        if(s->len==0){                printf("串空!");                return false;         }else{                int i;                for(i=1;i<=s->len;i++){                        printf("%c",s->ch[i]);                }                return true;        }} //串插入int HStrInsert(HString *s,int pos,const HString t){        if(pos<1||pos>s->len){                printf("位置不合法!");                return false;        }        char *temp;        temp=(char *)malloc((s->len+t.len+1) *sizeof(char));        int i;        for(i=1;ich[i];        }        for(i=pos;ilen-pos;i++){                temp[pos+t.len+i]=s->ch[i+pos];        }        free(s->ch);        s->ch=temp;        s->len=s->len+t.len;        return true; } //串删除int HStrDelete(HString *s,int pos,int len){        if(s->len==0){                printf("串空!");                return false;        }else if(len>=s->len){                printf("非法位置!");                return false;        }else{                for(int i=pos;ilen-pos;i++){   //跨度为len的依次赋值                         s->ch[i]=s->ch[i+len];                }                s->len=s->len-len;                return true;        }} //串连接 int HStrCon(HString *s,const HString t){   s->ch=(char *)realloc(s->ch,(s->len+t.len+1) *sizeof(char));   if(s==NULL){           printf("空间申请失败!");           return false;         }        if(s->len==0){                printf("串空!");                return false;        }else{                for(int i=1;i<=t.len;i++){                        s->ch[i+s->len]=t.ch[i];                }                s->len=s->len+t.len;                return true;        } } //求字串 int HStrchild(HString *s,int pos,int len){   if(s->len==0){           printf("串空!");           return false;         }else{           for(int i=0;ich[i+pos]);                 }                 return true;         } } int main(){        HString s;        HString s1;        HInit(&s);        HInit(&s1);        char a[]={"aaaaa"};        char b[]={"bbb"};        HStrAssign(&s,a);        HStrAssign(&s1,b);        printf("-----将aaaaa赋值给s,bbb赋值给s1-----\n");        printf("此时串s为:");         HSbianli(&s);        printf("\n此时串s1为:");         HSbianli(&s1);        printf("\n将s1连接到s为:");         HStrCon(&s,s1);    HSbianli(&s);         printf("\n将串s1插入到s串的第二个位置:");        HStrInsert(&s,2,s1);        HSbianli(&s);        printf("\n再将插入的s1串删除:");        HStrDelete(&s,2,3);        HSbianli(&s);        printf("\ns1在第二个元素长度为2的子串为:");        HStrchild(&s,2,2);}

三、运行:

代码可运行。

以上就是"C语言的堆串实例操作分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

0