首页 > 编程笔记 > C语言笔记 阅读:33

C语言字符数组用法详解(附带实例)

C 语言中,当数组中的元素类型为字符型时,这样的数组称为字符数组。

字符数组中的每个元素可以存放一个字符。字符数组的定义和引用方法与其他数据类型相似。

C语言字符数组的定义

字符数组的定义形式如下:
char 数组标识符[常量表达式]

例如,下述代码定义了一个字符数组 cArray,该数组中包含 5 个字符型的变量元素:
char cArray[5];

字符数组的引用也采用下标的形式。例如,引用数组 cArray 中的元素,并依次赋值,代码如下:
cArray[0]='H';
cArray[1]='e';
cArray[2]='l';
cArray[3]='l';
cArray[4]='o';

C语言字符数组的初始化

在对字符数组进行初始化操作时,有以下几种方法。

1) 逐个字符赋给数组中的元素

这是最容易理解的初始化字符数组的方式。例如:
char cArray[5]={'H','e','l','l','o'};
定义了一个包含 5 个元素的字符数组,在初始化的大括号中,每个字符赋值给一个数组元素。

2) 定义字符数组的同时进行初始化,可以省略数组长度

如果初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数来确定数组长度。

例如,上面初始化字符数组的代码可以写成:
char cArray[]={'H','e','l','l','o'};
代码中定义的 cArray[] 没有给出数组大小,但系统会自动根据初值的个数确定数组长度为 5。

3) 利用字符串给字符数组赋初值

字符数组可用来存放字符串。因此,也可以用字符串的方式对字符数组进行初始化赋值。例如:
char cArray[]={"Hello"};
或者将“{}”去掉,写成:
char cArray[]="Hello";

【实例】将利用字符数组输出“Park”。定义一个字符数组,通过初始化操作保存一串字符,然后通过循环引用将每一个数组元素输出。
#include<stdio.h>
int main()
{
    char cArray[5]={'P','a','r','k'};  /*定义字符数组并初始化*/
    int i;  /*循环控制变量*/
    for(i=0;i<5;i++)  /*循环输出字符数组元素*/
    {
        printf("%c",cArray[i]);
    }
    printf("\n");  /*输出换行*/
    return 0;
}
初始化字符数组时要注意,每个元素都要使用一对单引号(' ')括起来。在 for 循环中,因为输出的类型是字符型,所以 printf() 函数中使用的是“%c”格式符。通过循环变量 i,cArray[i] 实现了对数组中不同元素的引用。

运行程序,结果为:

Park

C语言字符数组的结束标志

在 C语言中,使用字符数组保存字符串时,系统会自动为其添加“\0”作为结束符。也就是说,用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的这个字节用于存放字符串结束标志“\0”。

例如,使用下述代码可以初始化一个字符数组:
char cArray[]="Hello";
上面的字符数组 cArray 在内存中的实际存放情况如下图所示:


图 1 cArray在内存中的实际存放情况

“\0”是由 C编译系统自动加上的。因此上面的赋值语句等价于:
char cArray[]={'H','e','l','l','o','\0'};
字符数组并不要求最后一个字符为“\0”,甚至可以不包含“\0”。因此下面的写法也是合法的:
char cArray[5]={'H','e','l','l','o'};
是否加“\0”,应根据需要来决定。由于系统对字符串常量会自动加一个“\0”,因此,为了使处理方法一致,且便于测定字符串的实际长度,在字符数组中也常常人为地加上一个“\0”。例如:
char cArray[6]={'H','e','l','l','o','\0'};

注意,如果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的那个字符串的长度。

C语言字符数组的输入和输出

字符数组的输入和输出可以使用两种格式字符:“%c”和“%s”。

使用格式字符“%c”可实现数组中字符的逐个输入与输出。例如,逐个输出字符数组中的元素:
for(i=0;i<5;i++)  /*进行循环*/
{
    printf("%c",cArray[i]);  /*逐个字符输出数组元素*/
}

使用格式字符“%s”可将整个字符串输入或输出。例如,输出一个字符串:
char cArray[] = "GoodDay!";  /*初始化字符数组*/
printf("%s", cArray);  /*输出字符串*/

使用格式字符“%s”输出字符串时,需要注意以下几种情况:
【实例】输出名言“Education is the door to freedom”(教育是通向自由之门)。对定义的字符数组初始化,然后采用两种方式输出字符数组中保存的数据,先逐个字符输出数组元素,再直接将字符串整体输出。
#include<stdio.h>
int main()
{
    int iIndex;
    char cArray[33]="Education is the door to freedom";  /*定义字符数组,用于保存字符串*/
    char cArray2[100]="教育是通向自由之门";

    for(iIndex=0;iIndex<33;iIndex++)  /*逐个字符输出数组元素*/
    {
        printf("%c",cArray[iIndex]);
    }
    printf("\n%s\n",cArray2);  /*将字符串整体输出*/
    return 0;
}
在代码中,对数组元素逐个字符输出时,使用的是循环方式。直接输出字符串时,使用的是printf函数中的格式字符“%s”。要注意,直接输出字符串时,不能使用格式字符“%c”。

运行程序,结果为:

Education is the door to freedom
教育是通向自由之门

注意,C语言中只存在字符类型,不存在字符串类型。字符类型只能存放单个字符,如果要存放字符串,就需要使用字符数组。当然,也可以使用字符型指针存放字符串。

C语言字符数组的应用

【实例】随机输入一个字符串,计算该字符串的长度。
#include<stdio.h>
int main()
{
    int iIndex;  /*循环控制变量*/
    int length=0;  /*保存字符串长度*/
    char cArray[80];  /*保存用户输入的字符串*/
    printf("请输入字符串:\n");
    gets(cArray);  /*用gets函数输入字符串*/
    for(iIndex=0;cArray[iIndex]!='\0';iIndex++)  /*循环字符串数组,直到遇到“\0”结束*/
    {
        length++;  /*每遍历一个字符,字符串长度加 1*/
    }
    printf("字符串长度是:%d\n",length);  /*输出字符串长度*/
    return 0;
}
使用 gets() 函数将输入的字符串保存在 cArray 字符数组中。使用 for 循环判断当前数组元素是否为结束符“\0”,如果不是,则字符串长度加 1;如果是,则退出循环。

运行程序,结果为:

请输入字符串:
cyuyanzhongwenwang
字符串长度是:18

相关文章