C++旧版课程库
C++第 2 期查看课程总览

034 字符串 char[]

主要内容

1. 字符和字符串

在上节课中,我们讲解了 字符类型 char ,并且介绍了字符在 C++ 中的表示

// 以下都是字符

char D = 'A';
char A = 'a';
char S = '0';
char H = '.';
char I = '+';
char M = '*';
根据我们的生活经验,除了使用一个字符以外,我们经常将字符连接起来使用,比如

// 以下每一行,都是一个“将字符连接起来”的示例

apple
Hello World!
4 * 8 = 64 / 2.0;
在 C++ 中,我们将这样的表达,称为 “字符串”“字符”和“字符串”的关系,如下图所示: 当然,这是一个类比啊,哈哈。

1.1 字符串的语法

在 C++ 中,字符串这样表示:

// 以下都是字符串

char da [] = "apple";
char shi[] = "Hello World!";
char ma [] = "4 * 8 = 64 / 2.0;";

char dashima[] = "A";
由什么值得注意的吗?
  • 字符串,使用双引号(")包围。
  • 字符串,可以有空格。
  • 所有的 ASCII 中的字符,都可以组成字符串。
  • 字符串,也可以只由一个字符组成。
  • 字符串,变量的声明语法,和一般的变量不同。
  • 下面,就字符串变量的声明,做详细说明。

    1.2 字符串变量的声明语法

    语法结构:
    
    char 变量名 [] = "字符串";
    
    和之前的变量声明相比,这里增加了一个中括号([])。请特别注意。 由于,“字符串”其实是由“字符”组成的,所以,声明中也体现了他们之间的联系。 字符串是使用 char 来作为基础的。 在编程中,大家应该将字符串看作一张表格。这样是非常有用的。 下面,讲解一下这个表格有什么作用。

    2. 索引

    对于一个表格来说,最重要的,就是怎么知道表格中的值。 字符串,可以看作一个表格,所以,应该如何获得字符串中的数据呢?

    2.1 索引读取

    请补全,并运行代码
    
    char str[] = "apple";
    std::cout << str[3] << std::endl;
    
    请注意,输出的字符是哪一个,是 p 还是 l ? 对一个字符串变量,可以使用中括号+数字,来读取里面的内容。 要特别注意的是,数字代表的意义是表格的索引号
  • 索引号,从 0 开始。
  • 2.2 索引写入

    请补全,并运行代码
    
    char str[] = "apple";
    str[3] = 'L';                    // 修改字符串中的值。注意,'L'是一个字符
    std::cout << str << std::endl;   // 输出字符串
    
  • 字符串中,每一个元素,都是一个字符
  • 2.3 输出字符串

    请补全,并运行代码
    
    char str[] = "apple";
    std::cout << str << std::endl;   // 输出字符串
    
    大家是否又有着这样的疑惑,为什么这里要把“读”和“写”分开介绍呢?这是因为,“读”和“写”的概念,在程序非常重要。 我们有必要,注意一个变量的“可读”和“可写”特性(也就是,这个变量是不是可以被改变)。

    2.4 可读可写的概念

    这些概念,举几个例子就清楚了。(近似说明,并不完全准确)
    
    “可读”“可写”          // 用铅笔画画
    “可读”“不可写”        // 书上的文字,对于读者来说,就是“可读”“不可写”
    “不可读”“可写”        // 一般没有这种逻辑。
    “不可读”“不可写”      // 国家的最高机密,对于不同百姓来说,就是“不可读”“不可写”
    
    在编程中,一般所有的变量都是可读的。但是,对可写权限有一些限制。 我们目前学习到的所有类型的变量,都是“可读”“可写” 的。有一些特殊的变量,我们将在后续课程中一一介绍。 小结一下,程序中,常见的读写权限组合为:
    
    “可读”“不可写”        // 低权限
    “可读”“可写”          // 高权限
    

    习题

    课后练习