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

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

c语言中字符串函数库(C语言中数据结构)(1)

一、堆串:

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

结构体

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

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

c语言中字符串函数库(C语言中数据结构)(2)

串赋值函数

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

1、串插入函数:

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

c语言中字符串函数库(C语言中数据结构)(3)

串插入函数

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

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

先看一下有关函数:

c语言中字符串函数库(C语言中数据结构)(4)

删除子串函数

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

3、定位函数:

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

c语言中字符串函数库(C语言中数据结构)(5)

定位函数

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

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

二、字符串处理函数:

1、strdup函数:

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

其一般形式是:

char *strdup(const char *s);

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

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

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

范例:

c语言中字符串函数库(C语言中数据结构)(6)

范例

2、strchr函数:

其一般形式为:

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

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

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

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

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

范例:

c语言中字符串函数库(C语言中数据结构)(7)

范例

运行结果:

c语言中字符串函数库(C语言中数据结构)(8)

结果

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

  • 上海小马路拆迁最新消息(我最爱的上海小马路)
  • 2024-06-29我最爱的上海小马路如果你爱逛小马路,上海永康路在你心里一定排得上号要我说,上海能成为全球咖啡店最密集的城市,离不开永康路凭一己之力带动了上海咖啡文化的发展,还引起了无数波打卡咖啡店的风潮但前阵子看到消息,永康路又要拆迁。
  • 深度解析gartner(Gartner防火墙魔力象限华为)
  • 2024-06-29Gartner防火墙魔力象限华为Gartner修改了网络防火墙的定义随着我们看到更多的客户转向混合网络,并寻求云端防火墙功能,云供应商也在向客户提供原生防火墙功能传统防火墙也为这些云平台提供支持因此今年开始,Gartner已开始还评。
  • 琅琊榜飞流为什么那么厉害(琅琊榜13为何说脾气差)
  • 2024-06-29琅琊榜13为何说脾气差梅长苏刚到雪庐居住的时候,萧景睿,言豫津和谢弼去看他,言豫津问梅长苏,“飞流去哪里了?”梅长苏说出去玩了,言豫津等人很担心,怕他出事,梅长苏却宠溺地说:“我们家飞流虽然心智不全,但脾气很好”豫津听后,。
  • 非主流经典句子(俏皮非主流的经典语录)
  • 2024-06-29俏皮非主流的经典语录听着,我允许你喜欢我除了白头偕老,我们没别的路可选了女人,可以没身材,可以没脸蛋但,绝不可以没眼光我的优点就是:勇于认错我的缺点就是:坚决不改在街上看美女,目光高一点就是欣赏,目光低一点就是流氓女孩在。
  • 世界杯阿根廷赛程分析表(阿根廷世界杯名单公布)
  • 2024-06-29阿根廷世界杯名单公布还有两个星期的时间,万众期待的2022年卡塔尔世界杯就将揭幕,虽然世界杯前各支俱乐部还要完成几场比赛,但相信无数人的心早已经飞到了卡塔尔,准备迎接这一令全世界瞩目的世界杯世界杯开始前,最重要的一项新闻。
  • 招投标的套路(你都知道些什么)
  • 2024-06-29你都知道些什么泄密法泄露投其他投标人的相关情况泄露标底、泄露评标情况、泄露关键人物名单,如:资格审查委员会或评标委员会名单特殊定制法为某个投标人,“量身定做”有明显倾向性的条款,以此控标招标前,与某一家供应商进行“。
  • 靠谱模拟器官网(靠谱助手安卓模拟器覆盖人群超3亿)
  • 2024-06-29靠谱助手安卓模拟器覆盖人群超3亿因移动设备无法完美展现手游体验,安卓模拟器作为一个替代工具被研发出来,虽说只是工具,但纵观近几年安卓模拟器市场,许多厂商已逐渐形成新型而又独立的分发平台据透露,国内最早运营安卓模拟器的靠谱娱乐,现已全。
  • 砂锅焖鱼做法 砂锅焖鱼的详细做法
  • 2024-06-29砂锅焖鱼做法 砂锅焖鱼的详细做法鱼是我们生活中非常常见的一种食材,鱼肉的营养比较丰富,而且蛋白质含量高脂肪低非常适合我们经常食用秋秋今天选了罗非鱼来做砂锅鱼,因为罗非鱼的鱼刺非常少,对于比较怕鱼刺多的朋友,罗非鱼是非常适合的选择罗非。
  • 机油5w30和5w40是什么意思(全合成机油5W40是什么意思?)
  • 2024-06-29全合成机油5W40是什么意思?全合成机油5W40是什么意思?1、机油分为矿物油,半合成机油,和全合成机油,这是机油种类5W-40表示机油黏度,5是低温流动性指数,W表示冬季,40表示黏度2、“W”表示Winter(冬季),其前面的。
  • 避免尬聊的100种话题(看了7个尬聊现场)
  • 2024-06-29看了7个尬聊现场今天我选择了一个很特别的案例之所以特别,是因为很少有一个案例,可以从第一句开聊就直奔车祸现场直到聊天结束自始至终全部答错,也是很不容易聊天背景:和相亲对象被动没话接想知道怎样和相亲对象聊天相亲对象太能。
  • 表示颜色多的四字词语(颜色多的四字词语有哪些)
  • 2024-06-29颜色多的四字词语有哪些五颜六色【解释】:形容色彩复杂或花样繁多引申为各色各样花红柳绿【解释】:形容明媚的春天景象也形容颜色鲜艳纷繁花花绿绿【解释】:原指花草树木鲜艳多彩;形容颜色鲜明多彩五光十色【解释】:形容色彩鲜艳,花样。