首页 百科知识 字符串常用函数的使用方法

字符串常用函数的使用方法

时间:2022-10-17 百科知识 版权反馈
【摘要】:由于在C语言中,字符串的应用非常广泛,为了简化用户的程序设计,C语言提供了丰富的字符串处理函数,这样可以大大减轻编程的工作量。输出的结果,既不是字符数组word的长度10,也不是字符串"abcd"所占用的字符数5,而是这个字符串中的实际字符数4。这是因为word1=word2试图用word2这个字符数组的地址去修改word1这个字符数组的地址,而字符数组的地址是不能在程序中修改的。比较的结果由函数值带回。

4.3.3 与字符串处理有关的几个函数

由于在C语言中,字符串的应用非常广泛,为了简化用户的程序设计,C语言提供了丰富的字符串处理函数,这样可以大大减轻编程的工作量。

C语言提供的字符串处理函数除了上一节讲的gets和puts这两个用于输入输出的函数被包含在stdio.h这个头文件中外,下面要讲述的函数都包含在头文件string.h中。

1.字符串长度测量函数strlen

在实际使用中,存储字符串的字符数组的长度不是很重要,因为在程序中一般依靠字符串结束标志'\0'的位置来判定字符串是否结束。这样字符串的长度与存储它的字符数组的长度是不变的,而实际使用中,更需要知道字符串的长度,即字符串中的字符个数。

C语言提供了测试字符串长度的函数,其一般形式为:

  strlen(字符数组名);

这个函数返回一个整型值,其值为字符串中的实际字符数(不包括'\0'在内),例如:

  char word[10]= "abcd";

  printf("%d",strlen(word));

输出的结果,既不是字符数组word的长度10,也不是字符串"abcd"所占用的字符数5,而是这个字符串中的实际字符数4。

2. 字符串复制函数strcpy

其一般形式为:

  strcpy(字符数组名1,字符串2);

这个函数将字符串2的所有字符一个一个地复制到字符数组1中,直到遇到结束标志'\0'为止,并把结束标志也写入到字符数组1中。

对于字符数组而言,只有在初始化时可以整体赋值,以后就只能一个元素一个元素地赋值,C语言提供这个函数,就可以实现对字符数组的整体赋值。

img357

上面的程序实现了将字符串word2复制到字符数组word1中这一功能。注意,如果使用“word1=word2;”来代替“strcpy(word1,word2);”则程序会出现错误。这是因为word1=word2试图用word2这个字符数组的地址去修改word1这个字符数组的地址,而字符数组的地址是不能在程序中修改的。

另外,在使用此函数,一定要保证字符数组1的长度要大于字符串2中的字符数,否则字符数组1会发生越界错误。

此外,C语言还提供了函数strncpy,用于将字符串2的前几个字符复制到字符数组1中,其一般形式为:

  strncpy(字符数组名1,字符串2,要复制的字符数);

比如:

  char str1[]="Sichuan";

  strncpy(str1,"Chengdu",3);

用于将字符串"Chengdu"的前3个字符,即Che复制到str1中,覆盖str1的前三个字符,即str1的值变为:Chehuan。

3.字符串连接函数strcat

其一般形式为:

strcat(字符数组名1,字符串2);

这个函数用两个字符串为参数,取消第一个字符数组中的字符串的结束标志'\0',把第二个字符串拼接至第一个字符串后面,并把拼接的结果存放到第一个字符数组中。

使用这个函数需要注意的是:这个函数将两个字符串拼接后存放在第一个字符数组中,因此第一个字符数组必须足够大,以便容纳拼接后的新字符串。

下面的程序运行时会出错,其原因就是因为第一个字符数组的长度不够。

img358

img359

4.字符串比较函数strcmp

其一般形式为:

  strcmp(字符串1,字符串2);

这个函数,将两个字符串按字典排序的方式进行比较,即从字符串1和字符串2的第一个字符开始从左至右依次按ASCII码进行比较,直到出现不相同的字符或碰到结束标志'\0'为止,以第一个不相等的字符的比较结果作为整个字符串的比较结果。比较的结果由函数值带回。

函数的返回值是一个整数,它的意义如下:

(1)在不相同字符的ASCII码中,如果字符串1与字符串2相等,即它们的长度相等,且对应的字符也相等,则返回0;

(2)在不相同字符的ASCII码中,如果字符串1大于字符串2,则函数返回一个正整数;

(3)在不相同字符的ASCII码中,如果字符串1小于字符串2,则函数返回一个负整数。

在使用字符串时,需注意要比较两个字符串中是否相同,只能通过这个函数来比较,不能直接对存储它们的数组名进行比较,因为那样比较的是两个字符串地址的大小,而不是字符串的大小。例如:

img360

以上程序的输出为:

−1

1

前一个−1表示字符串word1的值小于字符串word2,而后一个1表示作为字符数组地址的word1大于word2这个字符数组的首地址,该关系表达式的值为真。

5.其他字符串处理函数

C语言提供的字符串处理函数还有很多,一些常用的字符串处理函数如表4.3.1所示。

表4.3.1 常用字符串处理函数

img361

下面完成例4-5。

算法分析:

按照例4-5给出的规则进行判断。

用字符数组word[100]存放单词,用整型变量len表示原单词的长度。

(1)以字母y结尾,且y前面是一个辅音字母,即len〉1&&word[len−2]!='a'&&word[len−2]!='e'&&word[len−2]!='i'&&word[len−2]!='o'&&word[len−2]!='u'&&word[len−1]=='y',则将y改成i,再加es,即word[len−1]= 'i',word[len]= 'e',word[len+1]= 's',word[len+2]= '\0';

(2)以s、x、ch、sh结尾,即len〉1&&((word[len−1]== 's')||(word[len−1]== 'x')||(word[len−1]== 'h'&&(word[len−2]=='c'||word[len−2]== 's'))),则加es,即word[len]= 'e',word[len+1]= 's',word[len+2]= '\0';

(3)以字母o结尾 ,即word[len−1]= 'o',则加es,即;word[len]= 'e',word[len+1]= 's',word[len+2]= '\0';

(4)其他情况直接加s,即word[len]= 's',word[len+1]= '\0'。

参考程序如下:

img362

img363

程序的运行情况如图4.3.5所示。

img364

图4.3.5 求单词复数

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈