10. 二维数组与字符串——编程世界的多维存储与文本处理

10.1 二维数组

10.1.1 为什么需要二维数组

在实际编程中,一维数组只能处理线性的数据。但有时候我们需要处理更复杂的结构,比如矩阵、表格等。二维数组就像是一个表格,有行和列,可以用来存储和处理这样的二维数据。例如,要存储一个班级学生的多门课程成绩,就可以使用二维数组,其中行表示学生,列表示课程。

10.1.2 二维数组的定义和初始化
  • 定义二维数组 在 C++ 中,定义二维数组的基本语法是:数据类型 数组名[行数][列数]; 。例如:
#include <iostream>
using namespace std;

int main() {
    // 定义一个 3 行 4 列的二维整数数组
    int scores[3][4];
    return 0;
}
  • 初始化二维数组
    全部元素初始化
#include <iostream>
using namespace std;

int main() {
    // 全部元素初始化
    int scores[3][4] = {
        {80, 85, 90, 95},
        {70, 75, 80, 85},
        {60, 65, 70, 75}
    };
    return 0;
}

部分元素初始化

#include <iostream>
using namespace std;

int main() {
    // 部分元素初始化,未初始化的元素自动初始化为 0
    int scores[3][4] = {
        {80, 85},
        {70},
        {60, 65, 70}
    };
    return 0;
}

省略行数初始化

#include <iostream>
using namespace std;

int main() {
    // 省略行数,编译器会根据初始化列表确定行数
    int scores[][4] = {
        {80, 85, 90, 95},
        {70, 75, 80, 85},
        {60, 65, 70, 75}
    };
    return 0;
}
10.1.3 访问二维数组元素

二维数组的元素可以通过行下标和列下标来访问,行下标和列下标都从 0 开始。例如:

#include <iostream>
using namespace std;

int main() {
    int scores[3][4] = {
        {80, 85, 90, 95},
        {70, 75, 80, 85},
        {60, 65, 70, 75}
    };
    // 访问第 2 行第 3 列的元素
    cout << "第 2 行第 3 列的成绩是: " << scores[1][2] << endl;
    return 0;
}
10.1.4 遍历二维数组

通常使用嵌套循环来遍历二维数组,外层循环控制行,内层循环控制列。

#include <iostream>
using namespace std;

int main() {
    int scores[3][4] = {
        {80, 85, 90, 95},
        {70, 75, 80, 85},
        {60, 65, 70, 75}
    };
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            cout << "第 " << i + 1 << " 行第 " << j + 1 << " 列的成绩是: " << scores[i][j] << endl;
        }
    }
    return 0;
}

10.2 字符串

10.2.1 字符数组表示字符串

在 C++ 中,可以使用字符数组来表示字符串。字符串是以 '\0'(空字符)结尾的字符序列。

#include <iostream>
using namespace std;

int main() {
    // 定义一个字符数组表示字符串
    char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    cout << "字符串是: " << str << endl;
    return 0;
}

也可以使用字符串字面量来初始化字符数组:

#include <iostream>
using namespace std;

int main() {
    // 使用字符串字面量初始化字符数组
    char str[] = "Hello";
    cout << "字符串是: " << str << endl;
    return 0;
}
10.2.2 字符串的输入输出

可以使用 cincout 进行字符串的输入输出。

#include <iostream>
using namespace std;

int main() {
    char str[100];
    cout << "请输入一个字符串: ";
    cin >> str;
    cout << "你输入的字符串是: " << str << endl;
    return 0;
}

需要注意的是,cin 在遇到空格时会停止读取,若要读取包含空格的字符串,可以使用 cin.getline() 函数:

#include <iostream>
using namespace std;

int main() {
    char str[100];
    cout << "请输入一个包含空格的字符串: ";
    cin.getline(str, 100);
    cout << "你输入的字符串是: " << str << endl;
    return 0;
}
10.2.3 C++ 标准库中的 string

C++ 标准库提供了 string 类,使用它来处理字符串更加方便。

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 定义一个 string 对象
    string str = "Hello";
    cout << "字符串是: " << str << endl;

    // 输入一个 string 对象
    string inputStr;
    cout << "请输入一个字符串: ";
    getline(cin, inputStr);
    cout << "你输入的字符串是: " << inputStr << endl;

    return 0;
}

string 类提供了许多方便的成员函数,如 length() 用于获取字符串的长度,append() 用于拼接字符串等。

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str1 = "Hello";
    string str2 = " World";
    // 拼接字符串
    str1.append(str2);
    cout << "拼接后的字符串是: " << str1 << endl;
    // 获取字符串长度
    cout << "字符串的长度是: " << str1.length() << endl;
    return 0;
}

10.3 课后小练习

  1. 编写一个程序,定义一个 4 行 5 列的二维数组,将数组元素初始化为随机整数(范围 1 – 100),然后输出数组中的所有元素,并计算数组中所有元素的总和。
  2. 编写一个程序,输入一个字符串,统计其中字母、数字和其他字符的个数。

通过这部分的学习,你掌握了二维数组和字符串的基本概念、定义、初始化、访问、遍历以及字符串的处理方法,这些知识将帮助你处理更复杂的数据结构和文本信息。

类似文章

发表回复