c语言中字符串函数库(C语言中数据结构)
c语言中字符串函数库(C语言中数据结构)
2024-11-22 10:39:06  作者:嗼笵亾粅  网址: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-22行测言语理解之选词填空方法透析在公务员考试行测中,言语理解都是必考题型,而在这个大的方向中,选词填空的题目频频出现,以至于很多人不愿意做这个类型的题目今天就和大家一起来剖析一下这个题型:(一)考情分析:只要是考到行测言语理解这个部。
  • 魏莱为什么突然认错(简单介绍一下魏莱的角色)
  • 2024-11-22简单介绍一下魏莱的角色魏莱为什么突然认错是一方面是因为自己欺凌陈念的行为被摄像头拍下,所以她害怕陈念报警,害怕自己的行径被父母知道,这样一来自己乖乖女的形象就会崩塌;另一方面是她对于陈念的保护者小北有所忌惮;还有一方面是害。
  • 曹植洛神赋女主角是谁(她是洛神赋的主人公)
  • 2024-11-22她是洛神赋的主人公导读:《洛神赋》中,相传是曹植为其嫂子甄宓所作,描写道“其形也,翩若惊鸿,婉若游龙,荣曜秋菊,华茂春松髣髴兮若轻云之蔽月,飘飖兮若流风之回雪远而望之,皎若太阳升朝霞迫而察之,灼若芙蕖出渌波”而这首《洛。
  • 三国志刘关张开荒(三国志刘鹞逆袭天下细解)
  • 2024-11-22三国志刘鹞逆袭天下细解玩过三国志12的都知道通关其实不难选那些弱小势力统一才有难度,也更有意思刘鹞其实开局还是有两点优势的,南面是两个盟友也是好拿捏的潜在臣子,王朗和严氏兄弟北面是袁二愣子,此时的袁二愣子实力不可小嘘,因为。
  • rwg超级兵单杀马超(RTS光荣之路上的惊鸿一瞥)
  • 2024-11-22RTS光荣之路上的惊鸿一瞥各位旅行者,请检查飞船后视镜和核动阀门,调整电台音乐频率前方即将降落于土星野餐旅馆:全息玫瑰碎片HologramRose.实际上本篇内容在很早之前就开始构思,却迟迟未下笔因为《英雄连》对于我本人来说是。
  • 女子被家暴乡村故事(被家暴吞噬50年的农村女人)
  • 2024-11-22被家暴吞噬50年的农村女人2020年12月21日,张建国、张建军哥俩为父亲张茂荣办了周年忌日按照黑龙江当地风俗,横死之人过世5年后方能入土,张茂荣的骨灰至今寄放在嫩江市殡仪馆棕红色的盒子里张建国来到殡仪馆,在祭奠台上摆了馒头、。
  • 苏州9号线地铁最新消息(苏州地铁11号线直通上海)
  • 2024-11-22苏州地铁11号线直通上海全国首条县级市域地铁线苏州首条对接上海地铁的线路苏州轨交11号线正全力冲刺确保3月1日试跑今年上半年开通试运营!届时苏州→上海地铁直达!今天(2月2日)上午看苏州记者前往站点施工现场提前探路!与上海轨。
  • 平阳县县域高质量发展突出贡献(激活沉睡资源平阳南麂探索)
  • 2024-11-22激活沉睡资源平阳南麂探索平阳县南麂镇是温州所有乡镇中,陆路面积最小、人口最少的一个,镇里11个村都是经济薄弱村然而,今年8月底,南麂镇全面“消薄”成功,11个村都摘掉了经济薄弱村的“帽子”据南麂镇党委书记林锟透露,是通过该镇。
  • 油菜花花期有多长(油菜花花期的时间)
  • 2024-11-22油菜花花期的时间油菜有25%的植株花时,即为初花期,75%植株开花为盛花期,花期约30天左右油菜花蕾苔期,是从植株露出花蕾到第一朵花开放为止这个时期是营养生长和生殖生长两旺阶段营养生长较快,每天植株增高2—3cm,叶。
  • 屁颠虫音响声卡一体麦克风(屁颠虫HiFier)
  • 2024-11-22屁颠虫HiFier屁颠虫手机K歌麦克风,是目前头款智能手机和电脑使用新型K歌产品唱吧、新浪好声音、K歌达人、天簌之声、爱唱、电脑酷我K歌、甚至是微信语音都全面兼容的一款手机K歌麦克风,从试销到美好升级上市,已有数万歌友。
  • 苏州出名的特产有哪些(苏州独有的特色)
  • 2024-11-22苏州独有的特色苏州属亚热带季风海洋性气候,四季分明,雨量充沛,种植水稻、小麦、油菜,出产棉花、蚕桑、林果,特产有碧螺春茶叶、长江刀鱼、太湖银鱼、阳澄湖大闸蟹等有2500多年历史的苏州,孕育出了自己独有的特色美食与特。