语句“Char*p=“C Language”;”的作用是使指针变量p指向字符串的起始地址,千万不要认为是将字符串中的字符赋给指针变量p。p是指向字符型数据的指针变量,它的值是地址。例7.18有一行字符,要求删除指定的字符。......
2023-11-18
在6.2节已经讨论过关于字符串数据最常见的处理,本小节将讨论字符串处理中较深入的问题,包括:字符串中字符的查找,字符串中字符的插入,字符串中字符的删除,字符串中子串的查找,字符串中子串的插入,字符串中子串的删除等。
标准库中提供的绝大多数关于字符串处理的标准库函数都是返回指针值的函数,其目的是使得操作后的结果可以作为下一次操作的左值或者函数调用的参数。在实际的应用程序设计过程中,对字符串处理标准库函数参数表中的字符指针参数(或字符数组参数)的理解是非常重要的。
1.字符串中字符的查找
在字符串中查找指定字符的基本思想是:从被操作字符串的第一个字符开始依次取出当前位置的字符与指定的字符相比较,若比较相符合则返回该字符的位置;否则进行下一轮比较直到被处理的字符串中所有字符取完为止。返回查找到的字符位置可以有返回下标序号方式和返回存放地址方式两种,在应用程序设计中应该根据需要选择,下面用示例描述这两种方式的基本方法。
【例8.20】 编制函数实现功能:在字符串中查找指定的字符,若被查找字符存在则返回字符在字符串中的下标序号;若指定的字符在被查找的字符串中不存在,则返回-1;并用相应主函数进行测试。
【例8.21】 编制函数实现功能:在字符串中查找指定的字符,若被查找字符存在则返回字符的存放地址;若指定的字符在被查找的字符串中不存在,则返回NULL;并用相应主函数进行测试。
标准函数库中提供了在字符串中查找指定字符的函数strchr,函数的原型为:
char*strchr(const char*s,int c);
函数的功能是:在由s表示的字符串中正向查找由c所表示的字符在串中首次出现的位置,若未找到则返回NULL。
【例8.22】 使用系统标准库函数在字符串中查找指定字符。
2.字符串中字符的插入
在字符串指定位置插入一个字符的基本思想是:将字符串中从指定位置以后的所有字符由后向前依次向后移动一个字符位置以腾出所需要的字符插入空间;然后将指定的插入字符拷贝到指定位置。字符的插入分为前插(插入的字符在指定位置原字符之前)和后插(插入的字符在指定位置原字符之后)两种方式,这两种方式的基本思想完全一致,不同之处在于字符串部分字符后移时是否包括指定位置的原字符。
【例8.23】 编制函数实现功能:在字符串的指定字符之前插入另外一个指定字符,插入成功返回1;若在字符串中找不到插入位置,则返回0;并用相应主函数进行测试。
3.字符串中字符的删除
在字符串中删除指定字符操作的基本思想是:首先在字符串中查找指定字符的位置,若找到则将字符串中自该位置之后所有字符依次向前移动一个字符位置。(www.chuimin.cn)
【例8.24】 编制函数实现功能:在字符串中删除指定字符,删除成功返回1;若指定字符不存在则返回0;并用相应主函数进行测试。
在字符删除过程中,自被删除字符之后的所有字符都向前移动一个位置,也可以理解成将删除字符开始的字符串向前复制一个位置,利用字符串复制的标准函数,删除字符函数可以简化为如下形式:
4.字符串中子串的查找
子串查找的基本思想是:首先在主串中查找子串的首字符,如果找到则比较其后连续的若干个字符是否与子串相同。如果相同则返回子串首字符在主串中出现的地址;否则在主串中向后继续查找。如果在主串中再也找不到子串的首字符,则返回NULL。
【例8.25】 编制函数实现在字符串中查找子字符串的功能,并用相应主函数进行测试。
还可以从另外一个方面去设计查找函数findsubstr,其基本思想是:从主串中的第一个字符开始,以后每次依次向后移动一个字符的位置,取出主串中与子串长度相等的前几个字符与子串比较。若相等则返回子串在主串中的起始位置,否则继续,直到主串查找完毕为止。若主串中不存在子串,返回NULL。例8.25中的子串查找函数findsubstr可以重写为:
5.字符串中子串的插入
在字符串指定位置插入子串的基本思想和在字符串中指定位置插入字符类似。仍然是首先在字符串中找到插入位置,然后仍然需要移动插入点之后的所有字符以腾出插入位置,最后进行插入操作。与插入一个字符不同的是需要按插入的子串长度腾出足够的插入位置,即需要将字符向后移动过足够的跨距而不是一个字符位置。
【例8.26】 编制实现子串插入功能的函数,插入点为子串的首字符在主串中第一次出现的位置,插入操作成功返回1,否则返回0,用相应主函数对子串插入函数进行测试。
上面程序中的子串插入操作是按照插入子串的基本思想编制的,如果充分利用系统标准库函数则可以使得编程过程更加简洁而高效。充分利用标准库函数,可以将函数insertsubstr按如下形式重写,请读者自行分析比较。
6.字符串中子串的删除
在字符串中删除子串的基本思想和在字符串中删除字符类似。仍然是首先在主串中找到欲删除的子串,然后需要向前移动被删除子串之后的所有字符。与删除一个字符不同的是要将子串后的字符向前移动过足够的跨距而不是一个字符位置。
【例8.27】 编制函数实现功能:在一个主串中查找指定的子串,找到则将子串从主串中删除,删除操作成功返回1,否则返回0;用相应的主函数进行测试。
同样,充分利用标准库函数可以将函数delsubstr重写为如下形式,请读者自行分析比较。
有关C语言程序设计基础(第3版)的文章
语句“Char*p=“C Language”;”的作用是使指针变量p指向字符串的起始地址,千万不要认为是将字符串中的字符赋给指针变量p。p是指向字符型数据的指针变量,它的值是地址。例7.18有一行字符,要求删除指定的字符。......
2023-11-18
3)屋面直升机停机坪荷载的组合值系数应取0.7,频遇值系数应取0.6,准永久值系数应取0。表1.2-4 屋面直升机停机坪局部荷载标准值及作用面积......
2023-08-28
目前对无效合同的认定和处理,存在尺度不一、处理混乱等问题,导致大量不应无效的合同被认定无效。笔者以为,除非明显违反法律、行政法规的强制性规定导致合同无效,法官以不释明为宜,因为在此情况下认定合同无效是法官自由心证的结果,对此一二审法院及不同法官之间的认识会有所不同,这就可能会导致案件处理结果不同。当事人因该无效合同取得的财产,应当予以返还;不能返还或者没有必要返还的,应当折价补偿。......
2024-01-19
专项应急预案应制订明确的救援程序和具体的应急救援措施,共分为自然灾害、事故灾难、公共卫生事件、社会安全事件四类。现场处置方案应根据风险评估及危险性控制措施逐一编制,做到事件(事故)相关人员应知应会,熟练掌握,并通过应急演练,做到迅速反应、正确处置。审定并签发总体应急预案、各专项应急预案、各现场处置方案。......
2023-06-27
由于工程类别不一样,单元工程质量评定标准的内容、项目的名称和合格率标准等也不一样。各检查项目全部符合质量标准,实测点的偏差符合规定者,评为合格;重要检测点的偏差小于规定者评为优良。对单元工程质量等级评定标准的规定也基本相同。单元工程(或工序)质量达不到《评定标准》合格规定时,必须及时处理。参加外观质量评定组的人员,必须具有工程师及以上技术职称。......
2023-11-19
在执行新课程标准时在教学中要处理好三个方面的关系:1.要处理好老师和学生的关系在教学中,尽管老师是主动方,学生是被动方,师生的关系应是平等的关系。这种平等关系的提出已有很多年了,但在实际教学中却很难得到体现。1)尽量缩短与学生的距离。2)教师对学生的标准要改变,要有多个标准,因人而异,而不是划一标准。这一过程的体现,就要靠教师的精心设计和启导。在现代教学中两者都有其重要性。......
2023-08-01
相关推荐