首页 百科知识 字符数组可以存放字符串

字符数组可以存放字符串

时间:2024-10-16 百科知识 版权反馈
【摘要】:输出的结果,既不是字符数组word的长度10,也不是字符串"abcd"所占用的字节数5,而是这个字符串中的实际字符数4。进行字符数组的复制,则程序会出现错误。使用strcpy函数,一定要保证字符数组1的长度要大于字符串2中的字符数,否则字符数组1会发生越界错误。比较的结果由函数值带回。

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

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

C语言提供的字符串处理函数除了gets和puts函数被包含在stdio.h头文件中外,其他函数都包含在头文件string.h中。

1.字符串长度计算函数str len

存储字符串的字符数组的长度一般是固定的,而字符串包含的字符个数是变化的,一般依靠字符串结束标志'\0'判定字符串是否结束。

在实际使用中,一般都需要确定字符串的长度,即字符串中的字符个数。

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

  str len(字符数组名);

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

  char word[10]= "abcd";

  printf("%d",str len(word));

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

2.字符串复制函数strcpy

一般形式为

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

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

strcpy函数可以实现对字符数组的整体赋值

#include <stdio.h>  // 预编译命令,用于printf函数

#include <string.h>  // 预编译命令,用于strcpy函数

void main( )

  char word1[ ]="sichuan";

  char word2[ ]="chengdu";

  strcpy(word1,word2);   // 将word2复制到word1中

  printf("%s\n",word1);

将字符串word2复制到字符数组word1。注意,如果使用

  word1=word2;

进行字符数组的复制,则程序会出现错误。因为试图修改word1字符数组的地址,而(字符)数组的地址是不允许修改的。

使用strcpy函数,一定要保证字符数组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);

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

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

下面的程序运行时会出错,请读者分析原因。

img256

4.字符串比较函数strcmp

一般形式为

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

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

函数的返回值是一个整数,它的意义为

(1)如果字符串1与字符串2相等(长度相等,且对应的字符也相等),则返回0;

(2)如果字符串1大于字符串2,则函数返回一个正整数;

(3)如果字符串1小于字符串2,则函数返回一个负整数。

在使用字符串时,需注意要比较两个字符串中是否相同,只能通过strcmp函数来比较,

不能直接对数组名进行比较,因为数组名比较的是两个字符串首地址的大小,而不是字符串的大小。例如:

img257

输出

−1

1

输出−1表示字符串word1的值小于字符串word2,且‘u’-‘v’=-1。

输出1表示作为字符数组地址的word1大于word2这个字符数组的首地址,该关系表达式的值为真。

5.其他字符串处理函数

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

表4.3.1 常用字符串处理函数

img258

(续表)

img259

例4-5 按规则将英语规则名词由单数变成复数。规则为

1)以字母y结尾,且y前面是一个辅音字母,则将y改成i,再加es;

2)以s、x、ch、sh结尾,则加es;

3)以字母o结尾,则加es;

4)其他情况直接加s。

要求用键盘输入英语名词,在屏幕上输出该名词的复数形式。

使用字符数组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'

参考程序为

img260

img261

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

img262

图4.3.5 求单词复数

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

我要反馈