在C 语言编译系统中有丰富的字符串处理函数,为用户使用提供了方便。字符串1<字符串2,函数值为一负整数。......
2023-10-21
字符和字符串都是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”。
有关C语言程序设计基础(第3版)的文章
库函数并不是C语言的一部分,它是由编译系统根据一般用户的需要编制并提供给用户使用的一组程序。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目和函数名以及函数功能是不完全相同的。考虑到通用性,只从教学需要的角度列出最基本的ANSI C建议的常用库函数。......
2023-11-18
语句“Char*p=“C Language”;”的作用是使指针变量p指向字符串的起始地址,千万不要认为是将字符串中的字符赋给指针变量p。p是指向字符型数据的指针变量,它的值是地址。例7.18有一行字符,要求删除指定的字符。......
2023-11-18
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
图4.9字符数组初始化状态③ 如果字符数组的元素个数与初值相同,可在定义时省略数组长度。图4.11程序运行结果4.字符串字符串:是用双引号括起来的字符序列,也称为字符串常量。图4.13存储状态用printf 函数以格式符%s 输出字符串时,首先按字符数组名找到数组起始地址,然后从起始地址开始逐个输出其中的字符,直到遇上字符串结束符‘\0’时为止。......
2023-10-21
在C程序中,可以通过标准库函数fgetc和fputc实现在文件中单个字符(字节)数据的读写。函数fputc的功能是将用变量c表示的字符数据写到与文件指针stream相关联的文件中去,写入数据的位置由文件的读写位置指针指定,fputc函数执行成功时返回被输出的字符值,当函数执行发生错误时则返回EOF(-1)。编写程序实现功能:将从键盘上输入的若干字符数据写入文本文件mydata.txt。编写程序实现功能:统计一篇英文文章中单词的个数。......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
前面已经讨论了数组的输入输出,采用循环结构同样可以实现字符数组的输入输出。程序设计中常常希望将字符串作为整体进行输入输出处理,C标准库中提供了专门用于字符串输入输出的函数。字符串输入输出示例。......
2023-11-20
相关推荐