C语言学习-第六章 利用数组处理批量数据-字符数组①

197 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

怎样定义字符数组

用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符。定义字符数组的方法与定义数值型数组的方法类似。如:

char c[10];
c[0] = 'I';
c[1] = '';
c[2] = 'a';
c[3] = 'm';
c[4] = '';
c[5] = 'h';
c[6] = 'a';
c[7] = 'p';
c[8] = 'p';
c[9] = 'y';

字符数组初始化

1.初始化列表

char c[10] = { 'I','', 'a', 'm', '', 'h', 'a', 'p', 'p', 'y' };
  • 如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
  • 如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
  • 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')

2.用字符串常量来使字符数组初始化。如:

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' };

字符数组并不要求它的最后一个字符为'\0', 甚至可以不包含'\0'。 如:char c[5] = { 'C', 'h', 'i', 'n', 'a' } 完全是合法的

怎样引用字符数组中的元素

可以引用字符数组中的一个元素,得到一个字符。 示例1: 输出一个已知的字符串。

//    输出一个已知字符串
    char c[15] = { 'I', ' ', 'a', 'm', ' ', 'a', ' ', 's', 't', 'u', 'd', 'e', 'n', 't', '.' };
    int i;
    for (i = 0; i < 15; i++) {
        printf("%c", c[i]);
    }
    printf("\n");

image.png

字符串和字符串结束标志

在C语言中,是将字符串做为字符数组来处理的。

示例1是用一个一维的字符数组来存放字符串'I am a student.'的,字符串中的字符是逐个存放到数组元素中的。该例中,字符串的实际长度与数组长度相等。

在实际工作中,人们关心的往往是字符串的有效长度而不是字符数组的长度。

为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0'作为结束标志

如果字符数组中存在若干字符,前面9个字符都不是空字符('\0'), 而第10个字符是'\0', 则认为数组中有一个字符串,其有效字符为9个。即,在遇到字符'\0'时,表示字符串结束,把它前面的字符组成一个字符串。

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

字符数组的输入输出

  • 逐个字符输入输出。用格式符"%c"输入或输出一个字符
  • 将整个字符串一次输入或输出。用"%s"格式符,输出时,遇到结束符'\0'就停止输出。