c语言中字符串函数库(C语言中数据结构)
c语言中字符串函数库(C语言中数据结构)
2024-11-06 01:12:31  作者:嗼笵亾粅  网址:https://m.xinb2b.cn/know/nae376856.html

在上一篇我们介绍了,定长顺序串,它缺点很明显,就是一开始必须分配一个足够长度的内存空间,要是用不完,那么就会浪费内存空间,要是初始分配的内存空间不够(如我们需要插入、置换、连接等操作),那么会发生截断,导致数据丢失,这有点不好,今天我们继续介绍数据结构串中的堆串,完美的解决了,定长顺序串存在的问题,它的特点呢,就是仍然以一组连续的内存空间存储字符序列,但是它是根据需要动态的分配内存空间,这就不需要考虑空间够不够用的问题了,下面我们就来介绍堆串的知识。


一、堆串:

既然要动态分配内存空间,那我们就需要用到动态内存管理函数了,前面已经说过,malloc函数、realloc函数、free函数就是动态内存管理函数,我们堆串就需要用到这些函数,首先,我们既然要动态分配内存空间,那么我们就需要一个字符指针,用于指向动态分配内存的首地址,然后,我们需要记录元素长度,整型表示,在这里我们的长度一般等于分配的内存空间长度,因为我们每次分配都会根据需要分配正好的内存空间,不会多也不会少,由上面我们得到堆串结构体,如下:

结构体

成员包含一个字符指针,一个整型变量,很简洁。

下面一个函数我们直接给串赋初值,如下:


串赋值函数

首先初始长度设为0,然后判断hs成员指针变量是否已经被分配内存空间,如果已分配,那么我们需要释放掉这片内存空间,然后在根据需要赋值字符串(ch)的长度,在分配相应的内存空间,while循环来得到需要赋值字符串的长度,然后判断得到的长度是否为0,如果不为0,那么我们就分配length长度的内存空间,然后通过for循环我们为串赋值,注意的是到最后我们需要手动添加空字符,如果为0,我们把串内成员指针初始化NULL。

1、串插入函数:

串插入函数顾名思义,就是将一个串插入另一个串中,因为是动态分配相应的内存空间,所以不需要考虑定长顺序串是否超出初始分配的最大长度的问题,我们先直接看下有关函数:


串插入函数

在函数中我们首先判断插入位置pos合法与否,判断被插入的串hs是否为空,空那就返回1,然后根据realloc重新分配两个串长度之和的内存空间,在这里我不建议使用realloc函数,因为上面的程序一旦分配失败,那么将会丢失掉原来的数据,因此我们可以使用局部字符指针变量,但是在这里为了方便,但是基本思路都是一样的,如果分配成功那么我们就可以使用循环来插入数据,首先我们通过第一个循环让插入位置pos后面的字符向后移动T->length的长度,然后在插入T串的数据,最后我们改变hs->length的数值,在末尾手动添加空字符。

2、删除指定位置的子串:

先看一下有关函数:


删除子串函数

在上面函数中,我们首先声明一个局部字符指针,用以指向后面分配内存的首地址,然后在判断删除的起始位置是否合法,注意pos len不能大于主串的长度,然后分配删除后内存空间长为主串长-len,在判断是否分配成功,不成功返回1,然后往新的内存空间中赋值,先把pos前的字符赋给mid,然后再把pos len位置到后面的字符赋给mid,最后我们改变length的值,注意在mid尾部手动添加空字符,然后现将原来的内存空间是否,再把新内存空间赋给hs->base。

3、定位函数:

该函数的作用是判断一个串,是否是主串的子串,如果是那么返回子串在主串中第一次出现的位置,下面我们看一下代码:


定位函数

上面我们首先判断串是否为空、还有pos序号是否正确,pos序号指代在主串位置pos后面查找是否有匹配的子串,后面我们先声明几个局部整型变量,i、j指代主串与子串的索引,count用作计数器,然后通过while判断是否已经到串最后,然后在通过if-else语句判断是否相等,相等各索引加1,如果计数器count=子串长度说明已找到,那么退出循环返回位置,如果不等,那么i继续增加,j、count置0。

上面就是堆串的一些常用基本操作,当然还有求子串函数、串比较函数等一些基本操作,暂时在这里暂不作讨论,因为这些基本操作很简单,因此暂时介绍到这里。

二、字符串处理函数:

1、strdup函数:

该函数的功能是将字符串复制到新建立的内存空间。

其一般形式是:

char *strdup(const char *s);

参数s是需要复制的字符串。

返回值:返回字符串指针,该指针指向复制后的新字符串地址。

注意:返回的指针指向的新内存地址空间,里面存放的只不过是s的一份拷贝,它们是没有关系的。

范例:


范例

2、strchr函数:

其一般形式为:

char *strchr(const char *s,char ch);

参数:s为要查找的目标字符串,

ch为要查找的字符,当然第二个参数也可以是整型变量。

作用:查找字符ch第一次在字符串s出现的指定位置。

返回值:如果找到则返回指向字符串s中第一次出现指定字符位置的指针。否则返回NULL。

范例:


范例

运行结果:


结果

好了,今天暂时只介绍到这里,下次继续介绍。

  • 网上购物怎么避免大数据杀熟(网络购物如何精准避)
  • 2024-11-06网络购物如何精准避据第三方数据机构直播日榜显示,10月21日“双11”预售首日,薇娅和李佳琦销售额分别达到了53.2亿元和38.7亿元与超高成交量对应的,是不断暴露的约定直播间福利兑现难、收货商品与直播间宣传不符、商品。
  • 甲鱼怎么吃更滋补(适合男人吃的肉类排行榜)
  • 2024-11-06适合男人吃的肉类排行榜蛋白质是组成细胞的基础物质,也是身体最重要的营养物质男人作为家里的“顶梁柱”,需要有一个强健的体魄,才能撑起一整个家庭而想增强体魄,补充蛋白质是必不可少的要补充蛋白质,肉类是最理想的,它不仅蛋白质含量。
  • 天然气显示e1是什么意思(其解决方法是什么)
  • 2024-11-06其解决方法是什么常见就是点火器坏了热水器主板失灵或者坏了放电针位置不对解决方法:开热水器防火板,尖嘴钳调整如果出现了EI这样的错误代码,EI是代表开机点不着火,要检查一下是不是燃气的阀门忘记开了。
  • 备孕小知识分享(备孕姐妹怎么吃)
  • 2024-11-06备孕姐妹怎么吃  备孕期间的夫妻要注意的事情很多,大家都知道,想拥有健康的下一代,自己的身体状况必须好,特别是女性的卵子以及男性的精子质量,如果你和丈夫都坚持好的饮食习惯,就能提高你受孕和孕育健康宝宝的机会那么,备。
  • 莅临正确的使用方法(莅临正确的使用方法列述)
  • 2024-11-06莅临正确的使用方法列述第一种是:用莅临代替光临,这是最常用的一种方法第二种是:前面用“来(来到)”或“前来”后面用“莅临”第三种是:将地点置于“莅临”之后,例:欢迎xx莅临我校指导工作第四种是:主题不明,可加“成员”、“一。
  • 零食有哪些(关于零食的介绍)
  • 2024-11-06关于零食的介绍薯片:薯片的主要原料土豆,含有丰富的维生素BBB6和泛酸等B群维生素及大量的优质纤维素,还含有微量元素、氨基酸、蛋白质、脂肪和优质淀粉等营养元素饼干:饼干的词源是“烤过两次的面包”,是从法语的bis(。
  • 飞机轮胎研发(航天黑科技之航天飞机轮胎)
  • 2024-11-06航天黑科技之航天飞机轮胎​提起航天运载器,读者的第一印象就是巨大的尺寸、惊人的质量和飞快的速度其中的典型代表是航天飞机,高56米、宽8.7米、重2000吨,像火箭一样发射上去,却要像飞机一样飞回来,返回的部分重达100吨左右。
  • 饲养泰迪犬的6个注意事项是什么(每天都要做的七件事)
  • 2024-11-06每天都要做的七件事饲养泰迪犬毕竟不是一件简单的事情,每天都要做下面这几件事,如果你漏做一件,都是不合格的主人!赶紧看看你做了没!第一件:定时定量喂食泰迪犬的肠胃本来就不好,所以宠主一定要定点定时定量喂食,这样才不会给泰。
  • 水养富贵竹是要单数还是双数(富贵竹养几支比较好)
  • 2024-11-06富贵竹养几支比较好富贵竹,茎叶纤秀,柔美优雅,姿态潇洒,不但可以净化空气还有非常好的寓意,因此富贵竹几乎是每个家庭必养的绿植之一盆栽小栈多的也不介绍了,直接说说大家比较关心的话题,那就是富贵竹到底养单数还是双数?养几支。
  • 活性炭的种类以及区别(活性炭是什么分类有哪些)
  • 2024-11-06活性炭是什么分类有哪些活性炭是一种主要由含碳材料制成的微晶碳素材料,其外观呈黑色、比表面积大、内部孔隙结构发达、吸附能力强活性炭材料中有大量肉眼看不见的微孔,1克活性炭材料中有表面积高达800-1500平方米的微孔,特殊用。
  • 什么时候请陪产假(陪产假那些事你知道吗)
  • 2024-11-06陪产假那些事你知道吗伴随着孩子的呱呱落地,男职工的陪产假也随之而来,作为几乎是最长的在职休假,这些事你知道吗?根据《湖南省人口与计划生育条例》第二十一条符合法定生育条件的夫妻,女方除享受国家规定的产假外增加产假六十天,男。
  • 蒜蓉粉丝扇贝蒸几分钟(蒜蓉粉丝蒸生蚝)
  • 2024-11-06蒜蓉粉丝蒸生蚝蒜蓉粉丝蒸生蚝图文作者|_蒍鉨变乖々点击图片▲收藏本菜谱原料:生蚝适量、粉丝适量、蒜头适量、香葱适量、盐适量、蚝油适量、花生油适量做法步骤:1.生蚝肉先取出后洗净2.取一部分壳刷洗干净备用3.粉丝提前。