首页 理论教育字符串处理标准函数指针

字符串处理标准函数指针

【摘要】:标准库中提供的绝大多数关于字符串处理的标准库函数都是返回指针值的函数,其目的是使得操作后的结果可以作为下一次操作的左值或者函数调用的参数。在实际的应用程序设计过程中,对字符串处理标准库函数参数表中的字符指针参数的理解是非常重要的。使用系统标准库函数在字符串中查找指定字符。编制函数实现在字符串中查找子字符串的功能,并用相应主函数进行测试。

在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重写为如下形式,请读者自行分析比较。