您好,欢迎来到星星旅游。
搜索
您的当前位置:首页char类型数组

char类型数组

来源:星星旅游

字符数组(一维、二维)

字符数组是数组元素为char类型的一种数组。凡是适合数组的定义和赋值,也都适合于字符数组。由于C语言没有提供字符串类型,字符串一般用一维字符数组来存放,而二维字符数组可以存放多个字符串。

一、字符数组的定义

字符数组定义的一般格式为:

  • 一维字符数组:char 数组名[整型常量表达式];
  • 二维字符数组:char 数组名[整型常量表达式1][整型常量表达式2];

如: char c[10],c1[2][15];

二、字符数组的初始化和赋值

字符数组的初始化与赋值与一般数组的很相似,但也有其特殊之处。

1.一维字符数组的初始化

如下例:

char c[5]={ ’ a’, ‘b’, ‘c’, ‘d’, ‘e’};

这是最基本的初始化方式。在初始化时要注意数组元素存放的是字符,因此用单引号而不是用双引号,如下面的初始化:

char c[5]={ " a","b","c","d","e"}; /*错误初始化方式*/

这时每个元素的初值变成了字符串,这显然是错误的。当字符数组用来存放字符串时,要注意字符串中包含了一个字符串结束标志’\0’,这个结束标志也要占用一个单元。其初始化方式有以下几种:

  • 用{ }列出初值列表实现。如:
   char s1[5]={ 'a', 'b', 'c', 'd', '\0'};//s1中存放的是字符串"abcd"
  • 用字符串常量直接初始化。如:
char s1[5]= "abcd"

这种方式初始化时,一定要注意数组的长度和字符串的长度的关系:字符串长度不包含结束符’\0’,数组长度要把结束符算在其内,因此数组的长度要大于字符串的长度。如下面的操作是错误的:

char s1[5]= "abcde"; /*数组的空间不够存放字符串*/

- 省略数组的大小,进行初始化。这是根据初值中字符的个数确定数组的长度。如

char s2[]="hello";//它等价于 char s2[6]= "hello";

2.二维字符数组的初始化

与其它二维数组初始化一样,有以下几种方式:

  • 用初值列表方式。如:
char s3[2][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};
  • 用字符串常量方式。如:
char s3[2][4]={ " abc"," mnl"};
  • 省略第一维大小的方式来初始化。如:
char s3[][4]={{ ' a', 'b', 'c', '\0'},{' m', 'n', 'l', '\0'}};char s3[][4]={ " abc","mnl"};

根据分行赋值的大括号{}的个数或常量字符串的个数确定第一维的大小为2。

3.赋值

与一般数组赋值相同,不能将一个字符串直接赋值给一个数组名,只能对字符数组的元素逐个赋值。如:

char s4[6];

要给它赋值为"hello",只能如下方式:

s4[0]= 'h',s4[1]= 'e',s4[2]= 'l',s4[3]= 'l',s4[4]= 'o',s4[5]= '\0';

不能为:s4=“hello”;
也不能是:s4[6]= “hello”;
注意:C语言中,无论是字符数组还是数值型数组在程序中只能给它的元素赋值。

三、字符数组的输入输出

其它类型的数组元素在输入输出时,只能逐个元素实现输入输出,但用字符数组来存放字符串时,可以进行整体的输入输出。

1.一维字符数组的输入输出

利用scanf()函数和printf()函数来实现输入输出时,通过在格式字符串中使用格式说明“%s”来实现。如:

main( )
{
  char s[7];
  printf(" please input a string: ");
  scanf(" %s",s);
  printf("the string is: %s. ",s);
}

输入及运行结果为:

please input a string: hello↙
 the string is: hello.

在输入时,已将字符串"hello"存放到了数组s中了。
注意:

  • 要求输入的字符串长度要小于数组的长度,因为系统会自动在输入的字符串后面加上字符串结束标志’\0’。

  • 在输入字符串时,输入的字符串是以空格、Tab键或回车等空白字符作为字符串输入的结束标志,后面的字符将作为另外输入项的内容。如:

例分析下面程序运行结果。

main( )
   {
        char name[20];
        printf("please input name: ");
        scanf(" %s",name);
        printf("the name: %s.\n",name);
}

程序输入及运行结果为:

  please input name:zhang san↙
  the name: zhang

该程序输入的虽然是" zhang san",但由于zhang后面有空格,故输出为" zhang",亦即数组name中的值为:" zhang"。

  • 利用“%s”格式说明输出字符串时,printf()函数的对应输出项应直接给出数组名,而不能是数组元素,因为数组元素的类型为char类型,而使用的格式说明为“%s”,并且要求用printf()函数输出的字符数组,必须以’ \0’作为结尾。

当然,字符串也可以通过scanf()函数和printf()函数利用格式说明“%c”来实现输入输出,但这时只能逐个字符的进行。还可以使用getchar()和putchar()函数来实现字符数组中单个字符的输入输出。

2.二维字符数组的输入输出

二维字符数组的每一行可以用来存放一个字符串,因此可以将二维字符数组看成是一个一维数组,数组中的元素为字符串,即被看作是字符串数组。如:

char ss[3][10];

main( )
{
    char ss[3][10];
    int i;
    printf("please input strings:\n");
    for(i=0;i<3;i++)
    scanf(" %s",ss[i]);
    for(i=0;i<3;i++)
    printf(" the No.%d string: %s\n",i+1,ss[i]);

}

数据输入及运行结果为:

please input strings:
Mary   John Smith↙
the No.1 string: Mary
          the No.2 string: John
         the No.3 string: Smith

注意:

  • 在scanf()和printf()函数中输入输出字符串时,不能使用ss[i][j],因为ss[i][j]表示是字符元素而不是表示字符串。

原文链接:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务