首页 理论教育C语言常用字符类函数处理基准库

C语言常用字符类函数处理基准库

【摘要】:C标准库中包含了许多用于字符或者字符串处理的标准库函数,本小节讨论其中最常用的字符分类函数和字符串处理函数的使用方法。表6.1常用字符分类标准函数字符分类函数应用。表6.2常用字符串处理标准函数续表字符串长度计算字符串长度计算的基本思想是:依次统计每个字符数据,直到字符串结束符'\0'为止。③字符串s1小于字符串s2时,函数返回负整数值

字符和字符串都是C程序设计中经常处理的数据对象之一,而且字符串处理具有特殊性,往往需要在程序设计中将字符串作为整体操作。C标准库中包含了许多用于字符或者字符串处理的标准库函数,本小节讨论其中最常用的字符分类函数和字符串处理函数的使用方法。

1.字符分类函数

C程序设计中常用的字符分类函数见表6.1,它们的原型在ctype.h中声明,使用这些函数时要用编译预处理语句#include<ctype.h>将头文件ctype.h包含到源程序文件中来。

表6.1 常用字符分类标准函数(ctype.h)

【例6.6】 字符分类函数应用。输入一个字符串,统计其中字母和数字的个数,并将其中的数字依次提取出来构成一个对应的十进制整数。

程序一次运行的结果是:

依次提取数字构成的整数是:12390

【例6.7】 输入一个字符串,将其中的英语字母大小写对换,其余字符保持不变。

程序在对字符串进行处理时,用循环表达依次取出字符串中所有字符进行处理的控制过程,请读者理解对于字符数组(字符串)为什么不用数组本身的长度进行循环控制。程序一次运行的结果是:

请输入字符串:abcdefg12345ABCDEFG(*)&^%^&$ABCD

转换后的结果是:ABCDEFG12345abcdefg(*)&^%^&$abcd

2.字符串处理函数

C程序设计中常用的字符串处理函数见表6.2,它们的原型在string.h中声明,使用这些函数时要用编译预处理语句#include<string.h>将头文件string.h包含到源程序文件中来。

许多字符串处理标准函数的被处理字符串数据、返回值类型使用的都是字符指针形式,用指针形式可以表达出字符串的起始或任意位置。字符串的起始位置对应于字符数组名字,本小节仅讨论使用字符数组名进行字符串处理的应用,关于使用指针方式处理字符串的问题,将在后续章节进行讨论。

表6.2 常用字符串处理标准函数(string.h)

续表

(1)字符串长度计算

字符串长度计算的基本思想是:依次统计每个字符数据,直到字符串结束符'\0'为止。字符串长度不包括结束符。

【例6.8】 从键盘输入一个字符串,统计该字符串中有效字符个数(即字符串长度)。

字符串长度测试标准库函数strlen的原型为:

size_t strlen(const char*s);

函数原型中的size_t是系统定义好的用于统计存储单元个数和重复次数的数据类型,实质上就是整型(int)数据类型。

函数的功能是:返回(获取)由s表示的字符串数据中的字符个数,统计在遇到字符串数据中的第一个'\0'字符时结束。

在strlen函数的使用中,参数字符串可以是字符串常量或字符数组名。函数向调用函数返回字符串中第一次出现'\0'之前的字符串有效长度。注意strlen函数和sizeof运算符之间的区别,strlen是统计字符串的有效字符个数,而sizeof运算符是计算存放字符串数据的数组(存储区域)字节数。

例如,设有定义:char a[10]="123";,则strlen(a)得到的值是3(有效字符个数),而sizeof(a)得到的值是10(数组长度)。

使用标准函数,例6.8程序可重写如下:

/*Name:ex0608a.c*/

(2)字符串拷贝

字符串拷贝(复制)的基本思想是:从源字符串的第一个字符开始依次取出每一个字符,赋值到目标串对应元素,直到字符串结尾符号为止。注意,符号'\0'要照样赋值。

【例6.9】 字符串复制方法的实现。

字符串复制标准库函数strcpy的原型为:

char*strcpy(char*st,char*sr);

函数的功能是:将由sr表示的源字符串复制到由st指定的目标地址中。

在strcpy函数的使用中,st参数对应的必须是一个字符数组表示的空间,sr参数既可以对应字符数组名,也可以使用字符串常量。字符数组st的长度要足够大,不得小于字符串sr的长度,复制时连同'\0'一起复制。

特别提示:不能使用赋值(=)语句方式拷贝字符串,其原因是对字符数组也不能整体操作。

使用标准函数,例6.9程序可重写如下:

(3)字符串连接

字符串连接的基本思想是:将源串sr的每个字符(含结束符)依次赋值到从目标串st结束符开始的后续数据单元中。

【例6.10】 字符串连接方法实现。(www.chuimin.cn)

字符串连接标准库函数strcat的原型为:

char*strcat(char*st,char*sr);

函数的功能是:将由sr表示的源字符串拷贝到由st表示的目标字符串的末尾(即连接到st所表示的字符串后)。

在strcat函数的使用中,st参数对应的必须是一个字符数组表示的空间,st字节长度必须满足两个字符串连接后的长度要求,参数sr既可以是字符数组,也可以是字符串常量。

使用标准函数,例6.10程序可重写如下:

(4)字符串比较

基本思想是从参与比较操作的两个字符串的第一个字符开始依次比较相同位置的两个对应字符,在下列两种情况之下结束比较过程:

·两个字符串中对应位置字符的ASCII码值不相同。

·遇到两字符串中任何一个字符串的串结尾字符'\0'。

字符对位比较过程结束,用该时刻两个字符串中对应位置字符的ASCII码差值来确定两个字符串之间的关系。

【例6.11】 字符串比较方法实现。

字符串比较标准库函数strcmp的原型为:

int strcmp(char*s1,char*s2);

strcm函数对参数s1和参数s2表示的两个字符串进行比较,方式是依次比较两字符串中对应位置的字符,当遇到第一对不同的字符或者两字符串中的任一字符串结束标志符时退出比较。比较值是按ASCII码的大小进行的,即ASCII码值大的字符较大,ASCII码值小的字符较小,如"computer"比"company"大,因为第一个不相同的字符'u'的ASCII码值比'a'的ASCII码值大。函数的返回值是一个整数,根据该值判定两字符串的大小关系。

①字符串s1等于字符串s2时,函数返回0值。

②字符串s1大于字符串s2时,函数返回正整数值(s1与s2对应字符ASCII码差值)。③字符串s1小于字符串s2时,函数返回负整数值(s1与s2对应字符ASCII码差值)。strcmp函数的使用中,两个参数s1和s2都可以是字符串常量或字符数组名。

特别提示:字符串的比较不能使用类似if(s1==s2)的关系运算实现,其原因是对字符数组也不能整体操作。

使用标准库函数,例6.11程序可重写如下:

【例6.12】 字符串处理函数综合使用示例。反复从键盘上输入若干字符串(直到输入空串为止),判断输入的字符串是否是回文字符串,是回文字符串输出提示信息“Yes”,否则输出提示信息“No”。