zoukankan      html  css  js  c++  java
  • 字符数组

    用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。

    1 字符数组的定义

    定义方法与前面介绍类似

    如:char c[3];

    c[0]='i';

    c[1]=' ';

    c[2]='a';

    定义的c为字符数组,包含3个元素

    由于字符型与整型是互相通用的,因此上面的定义也可以改为

    int c[3];

    2 字符数组的初始化

    对字符数组初始化,最容易的理解方式是逐个字符赋给数组中各元素

    如:char c[10] = {'i',' ','a','m',' ','h','a','p','p','y'};

    也可以定义和初始化一个二维字符数组

    char diamond[5][5] = {{' ',' ',' ','*'},{' ','*',' ','*'},{'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ',' ','*'}};

    3 字符数组的引用

    可以引用字符数组中的一个元素,得到一个字符。

    #include <stdio.h>

    void main()

    {

      char c[10] = {'i', ' ', 'a', 'm', ' ', 'a', 'b','o','y'};

      int i;

      for(i=0;i<10;i++)

        printf("%c", c[i]);
    }

    运行结果: i am a boy

    4 字符串和字符串结束标志

      在C语言中,将字符串作为字符数组来处理,例如定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符 '\0' 代表,如果有一个字符串,其中第10个字符为 '\0' 则此字符串的有 效字符为9个,也就是说,在遇到字符 '\0' 时,表示字符串结束,由它前面的字符组成字符串。

      系统对字符串常量也自动加一个 '\0' 作为结束符,例如 "C Program" 共有9个字符,但在内在中占10个字节,最后一个字节 '\0' 是由系统自动加的,字符串作为一维数组存放在内存中。

      有了结束标志 '\0' 后,字符数组的长度就显示不那么重要了,在程序中往往依靠检测 '\0' 的位置来判断字符串是否结束,而不是根据数组的长度来决定字符串的长度,当然在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度,如果在一个字符数组中先后存放多个不同 长度的字符串,则应使数组长度大于最长的字符串的长度。

      对字符数组初始化的方法补充一种方法,可以用字符串常量来使字符数组初始化。

    如:char c[] = {"I am happy"};

    也可以省略花括号直接写成

    char c[] = "I am happy";

      不是用单个字符作为初值,而是用一个字符串作为初值,显然这种方法直观,方便,符合人们的习惯,数组c 的长度不是10而是11,这点要注意,因为字符串常量的最后由系统加上一个 '\0' 因此上面的初始化与下的初始化等价。

    char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y', '\0'};

    而不与下面的等价

    char c[] = {'I', ' ', 'a','m', ' ', 'h', 'a', 'p', 'p', 'y'};

    如果有

    char c[10] = {"China"};

    数组c 的前5个元素为 'C','h','i','n','a' 第6个元素为 '\0' 后4个元素为空字符

    C h i n a \0 \0 \0 \0 \0

    说明,字符数组并不是要求它的最后一个字符为 '\0' ,甚至可以不包含 '\0' 像下面的写法完全是合法的

    char c[5] = {'C', 'h', 'i', 'n', 'a'};

    是否需要加 '\0' 完全根据需要决定,但是由于系统对字符串常量自动加一个 '\0' 因此人们为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组也常常人为加上一个 '\0' 如

    char c[6] = {'C', 'h', 'i', 'n', 'a', '\0'};

    5 字符数组的输入输出

    (1)逐个字符输入输出,用格式符 %c

    (2)将整个字符串一次输入或输出,用 %s

    如:

    char c[] = "China";

    printf("%s", c);

    输出时遇结束符 '\0' 就停止输出,输出结果为 China

    注意:

    输出字符不包括结束符 '\0'

    用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名

    printf("%s", c[2]);//这样是不正确的

    如果数组长度大于字符串的实际长度,也只输出到遇到 '\0' 结束

    如:char c[10] = "China";

    也只输出 China 5个字符,而不是输出10个字符,这就是用字符串结束标志的好处。

    如果一个字符数组中包含一个以上的 '\0' 则遇第一个 '\0' 时输出结束

    可以用scanf函数输入一个字符串,例如

    scanf("%s", c);

    scanf函数中的输入项c是字符数组名,它应该在先前被定义,从键盘输入的字符串应短于已定义的字符数组的长度。

    如:char c[6];

    从键盘输入:

    China

    系统自动在后面加一个 '\0' 结束符,如果利用scanf函数输入多个字符串,则以空格分隔如:

    char str1[5], str2[5], str3[5];

    scanf("%s%s%s", str1, str2, str3);

    输入数据:

    How are you?

    输入后 str1, str2, str3 数组状态如下:

    H o w \0

    a r e \0

    y o u ? \0

    如果改为好下:

    char str[13];

    scanf("%s", str);

    输入数据:

    How are you?

    实际上并不是把这12个字符加上 '\0' 送到数组 str 中,而是将空格前的字符 How 送到 str 中,由于把 How 作为一个字符串处理,因此在其后加 '\0'  str 数组状态如下:

    H o w \0

    需要注意:scanf函数中的输入项是字符数组名,输入项为字符数组名,不要加地址符 & 因为在C语言中数组名代表该数组的起始地址, 下面的写法是不对:

    scanf("%s", &str);

  • 相关阅读:
    iOS--推送
    iOS 多线程之GCD
    iOS多线程之NSThread
    NSUserDefaults的简单使用
    stat命令的实现-mystat
    linux pwd指令的C实现
    2019-2020-1 20175307 20175308 20175319 实验五 通讯协议设计
    2019-2020-1 20175307 20175308 20175319 实验四 外设驱动程序设计
    2019-2020-1 20175307 20175308 20175319 实验三 并发程序
    2019-2020-1 20175307 20175308 20175319 实验二 固件程序设计
  • 原文地址:https://www.cnblogs.com/qkhhxkj/p/2089364.html
Copyright © 2011-2022 走看看