文章标题

来源:互联网 发布:ubuntu安优麒麟装教程 编辑:程序博客网 时间:2024/06/03 21:24
                           **字符数组——小结**

近期在学习C语言,现将内容整理成一篇博客,如有错误,欢迎指正~

一. 定义

用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。常用定义格式:
char c[10];
但是因为字符型和整型是互相通用的,所以也可以定义一个整型数组,用来存放字符数据,如下:
int c[10]; c[0]=’a’;

二. 初始化

有两种方法:逐个字符赋给数组中各元素,用字符串常量来使字符数组初始化。
在认识初始化之前,应该先了解字符串结束的标志’\0’。为了测定字符串的实际长度,C语言规定了一个”字符串结束标志“,以字符’\0’作为标志。如果有一个字符串,前9个字符都不是空字符,而第十个字符是’\0’(这个字符是系统自动加的),则此字符串的有效字符是9个,在内存中占10个字节。
如字符串常量C PRAGRAM在内存中的情况是
C PRAGRAM\0
占10个字节,实际有效字符为9个。
下面,来分别看这两种初始化方法:

1、逐个字符赋给数组中各元素
与其他数组的初始化相同,根据值依次给字符数组赋值,如
char c[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};(此处注意,如果后面提供的初值个数大于数组长度。则会出现语法错误)
如果提供的初值个数小于数组长度,则其余的元素系统自动补空字符,即’\0’。这个字符打印出来显示是null

如果提供的初值个数就是数组长度,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。如
char c[]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};该数组的长度自动定为10。

2、用字符串常量来使字符数组初始化
如,char c[]={“I am happy”}; 这种方式比char c[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};看起来要清晰。
但是要注意的是,char c[]={“I am happy”};的数组长度是11,而char c[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’};的数组长度为10.
char c[]={“I am happy”};等价于char c[10]={‘I’,’ ‘,’a’,’m’,’ ‘,’h’,’a’,’p’,’p’,’y’,’\0’};

三、字符数组的输入输出
字符数组的输入输出也有两种方法:
(1)逐个字符输入输出。用格式符”%c”输入输出一个字符,如
char c[10];
for(int i=0;i<10;i++) scanf(“%c”,c[i]);
(2)将整个字符串一次输入或输出。用格式符”%s”,输入输出一个字符串,如
char c[]={“china”};
printf(“%s”,c);
对于这种方式有以下几点需要注意:
1.输出字符不包括结束符’\0’
2.用”%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。
3.如果数组长度大于字符串的实际长度,也只输出到遇’\0’结束。
4.如果一个字符数组中包含一个以上’\0’,则遇到第一个’\0’时输出就结束。

四、字符串处理函数
1.puts函数
(1)作用:将一个字符串(以’\0’结束的字符序列)输出到终端。
(2)一般形式:puts(字符数组名)
(3)例如:char str[]={“China\nBei jing”};puts(str);
输出:
China
Bei jing

2.gets函数
(1)作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。
(2)一般形式:gets(字符数组名)
(3)例如:char str[30]; gets(str);

3.strcat函数
(1)作用:连接两个字符数组中的字符串
(2)一般形式:strcat(字符数组1,字符数组2),将字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
(3)例如:
char str1[30]={“People’s Republic of”};
char str2[]={“China”};
printf(“%s”,strcat(str1,str2));
输出:
People’s Republic of China

4.strcpy和strncpy函数
(1)作用:将第二个字符串复制到第一个字符串中
(2)一般形式:strcpy(字符数组1,字符串2)或者strncpy(字符数组1,字符数组2,n),将字符串2复制到字符串1中,注意,复制时,字符串2中的字符串和其后的’\0’一起复制到字符数组1中,取代字符串1中的前n个字符。strncpy的作用是指可以指定复制字符串2中前多少个字符。
(3)例如:
char str1[10]=”,str2={“China”};
strcpy(str1,str2);
执行后,得到的str1的状态为 China\0\0\0\0\0

5.strcmp函数
(1)作用:比较字符串1和字符串2。字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值比较),直到出现不同的字符或遇到’\0’为止。
(2)一般形式:strcmp(字符串1,字符串2),比较的结果由函数值带回:
如果字符串1=字符串2,则函数值为0;
如果字符串1>字符串2,则函数值为一个正整数;
如果字符串1<字符串2,则函数值为一个负整数。
(3)例如:strcmp(“China”,”Korea”);

6.strlen函数
(1)作用:测试字符串长度,结果不包括’\0’在内
(2)一般形式:strlen(字符数组/字符串);
(3)例如:char str[10]={“China”}; int m=strlen(str);
得到 m=5;
7.strlwr函数与strupr函数
(1)作用:strlwr函数是将字符串中大写字母换成小写字母,strupr函数是将字符串中小写字母换成大写字母。
(2)一般形式:strlwr(字符串);strupr(字符串);

0 0