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 字符串的输入输出
可以使用 cin
和 cout
进行字符串的输入输出。
#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 课后小练习
- 编写一个程序,定义一个 4 行 5 列的二维数组,将数组元素初始化为随机整数(范围 1 – 100),然后输出数组中的所有元素,并计算数组中所有元素的总和。
- 编写一个程序,输入一个字符串,统计其中字母、数字和其他字符的个数。
通过这部分的学习,你掌握了二维数组和字符串的基本概念、定义、初始化、访问、遍历以及字符串的处理方法,这些知识将帮助你处理更复杂的数据结构和文本信息。