简介
在本实验中,你将学习如何在 C++ 中操作数组和字符串。实验涵盖了一系列主题,包括创建和初始化一维数组、访问和修改数组元素、实现二维数组、使用 C 风格字符串和 String 类、对数组元素进行排序、执行线性搜索,以及使用 getline()
处理字符串输入。通过这些动手练习,你将对 C++ 编程中的基本数组和字符串操作有深入的理解。
在本实验中,你将学习如何在 C++ 中操作数组和字符串。实验涵盖了一系列主题,包括创建和初始化一维数组、访问和修改数组元素、实现二维数组、使用 C 风格字符串和 String 类、对数组元素进行排序、执行线性搜索,以及使用 getline()
处理字符串输入。通过这些动手练习,你将对 C++ 编程中的基本数组和字符串操作有深入的理解。
在本步骤中,你将学习如何在 C++ 中创建和初始化一维数组。数组是一种基本的数据结构,允许你在连续的内存位置中存储多个相同类型的元素。
打开 WebIDE,在 ~/project
目录下创建一个名为 arrays_intro.cpp
的新文件。我们将探索不同的数组初始化方法。
touch ~/project/arrays_intro.cpp
将以下代码添加到 arrays_intro.cpp
文件中:
#include <iostream>
int main() {
// 方法 1:声明并初始化一个具有特定大小的数组
int numbers[5] = {10, 20, 30, 40, 50};
// 方法 2:让编译器确定数组大小
int scores[] = {85, 92, 78, 95, 88};
// 方法 3:用默认值零初始化数组
int zeros[6] = {0};
// 方法 4:创建一个数组并在稍后初始化
int temperatures[4];
temperatures[0] = 72;
temperatures[1] = 68;
temperatures[2] = 75;
temperatures[3] = 80;
// 打印数组元素
std::cout << "第一种方法 - numbers 数组:" << std::endl;
for (int i = 0; i < 5; i++) {
std::cout << "元素 " << i << ": " << numbers[i] << std::endl;
}
return 0;
}
让我们分解数组的初始化:
int numbers[5] = {10, 20, 30, 40, 50};
:显式定义数组大小并初始化所有元素int scores[] = {85, 92, 78, 95, 88};
:让编译器确定数组大小int zeros[6] = {0};
:将所有元素初始化为零temperatures[index] = value
编译并运行程序:
g++ arrays_intro.cpp -o arrays_intro
./arrays_intro
示例输出:
第一种方法 - numbers 数组:
元素 0: 10
元素 1: 20
元素 2: 30
元素 3: 40
元素 4: 50
关于数组的关键点:
在本步骤中,你将学习如何在 C++ 中使用索引访问和修改数组元素。基于上一步的数组初始化内容,我们将探索如何与单个数组元素进行交互。
打开 WebIDE,在 ~/project
目录下创建一个名为 array_indexing.cpp
的新文件:
touch ~/project/array_indexing.cpp
将以下代码添加到 array_indexing.cpp
文件中:
#include <iostream>
int main() {
// 创建一个学生成绩数组
int scores[5] = {85, 92, 78, 95, 88};
// 通过索引访问数组元素
std::cout << "第一个学生的成绩: " << scores[0] << std::endl;
std::cout << "第三个学生的成绩: " << scores[2] << std::endl;
// 修改数组元素
std::cout << "第二个学生的原始成绩: " << scores[1] << std::endl;
scores[1] = 96; // 更新第二个学生的成绩
std::cout << "更新后的第二个学生的成绩: " << scores[1] << std::endl;
// 计算数组元素的总和
int total_score = 0;
for (int i = 0; i < 5; i++) {
total_score += scores[i];
}
std::cout << "班级总成绩: " << total_score << std::endl;
// 计算平均成绩
double average_score = static_cast<double>(total_score) / 5;
std::cout << "班级平均成绩: " << average_score << std::endl;
return 0;
}
关于数组索引的关键点:
[]
访问元素编译并运行程序:
g++ array_indexing.cpp -o array_indexing
./array_indexing
示例输出:
第一个学生的成绩: 85
第三个学生的成绩: 78
第二个学生的原始成绩: 92
更新后的第二个学生的成绩: 96
班级总成绩: 442
班级平均成绩: 88.4
重要的索引规则:
在本步骤中,你将学习如何在 C++ 中创建和操作二维数组。二维数组类似于具有行和列的表格或矩阵,允许你以网格结构存储和操作数据。
打开 WebIDE,在 ~/project
目录下创建一个名为 matrix_arrays.cpp
的新文件:
touch ~/project/matrix_arrays.cpp
将以下代码添加到 matrix_arrays.cpp
文件中:
#include <iostream>
int main() {
// 方法 1:声明并初始化一个 3x3 矩阵
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 方法 2:声明矩阵并在稍后初始化
int grades[2][4];
grades[0][0] = 85;
grades[0][1] = 92;
grades[0][2] = 78;
grades[0][3] = 95;
grades[1][0] = 88;
grades[1][1] = 90;
grades[1][2] = 82;
grades[1][3] = 87;
// 打印第一个矩阵
std::cout << "第一个矩阵:" << std::endl;
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
std::cout << matrix[row][col] << " ";
}
std::cout << std::endl;
}
// 打印成绩矩阵
std::cout << "\n成绩矩阵:" << std::endl;
for (int row = 0; row < 2; row++) {
for (int col = 0; col < 4; col++) {
std::cout << grades[row][col] << " ";
}
std::cout << std::endl;
}
return 0;
}
关于二维数组的关键点:
array[row][column]
编译并运行程序:
g++ matrix_arrays.cpp -o matrix_arrays
./matrix_arrays
示例输出:
第一个矩阵:
1 2 3
4 5 6
7 8 9
成绩矩阵:
85 92 78 95
88 90 82 87
重要的二维数组概念:
在本步骤中,你将学习 C 风格字符串以及空终止符在 C++ 中的重要性。C 风格字符串是以特殊字符 '\0'
结尾的字符数组,用于标记字符串的结束。
打开 WebIDE,在 ~/project
目录下创建一个名为 c_style_strings.cpp
的新文件:
touch ~/project/c_style_strings.cpp
将以下代码添加到 c_style_strings.cpp
文件中:
#include <iostream>
#include <cstring>
int main() {
// 方法 1:显式使用空终止符初始化字符串
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
std::cout << "问候语: " << greeting << std::endl;
// 方法 2:以字符串字面量初始化(自动添加空终止符)
char name[] = "John Doe";
std::cout << "姓名: " << name << std::endl;
// 方法 3:声明固定大小并初始化
char message[20] = "Welcome to C++!";
std::cout << "消息: " << message << std::endl;
// 演示字符串长度
std::cout << "姓名的长度: " << strlen(name) << std::endl;
// 手动计算字符串长度
int length = 0;
while (name[length] != '\0') {
length++;
}
std::cout << "手动计算的姓名长度: " << length << std::endl;
return 0;
}
关于 C 风格字符串的关键点:
'\0'
用于标记字符串的结束strlen()
函数计算空终止符之前的字符数编译并运行程序:
g++ c_style_strings.cpp -o c_style_strings
./c_style_strings
示例输出:
问候语: Hello
姓名: John Doe
消息: Welcome to C++!
姓名的长度: 8
手动计算的姓名长度: 8
重要的字符串初始化概念:
在本步骤中,你将学习 C++ 中强大的字符串类方法,这些方法使字符串操作更加简单和直观。我们将探索 length()
、substr()
和 find()
等关键方法。
打开 WebIDE,在 ~/project
目录下创建一个名为 string_methods.cpp
的新文件:
touch ~/project/string_methods.cpp
将以下代码添加到 string_methods.cpp
文件中:
#include <iostream>
#include <string>
int main() {
// 创建一个字符串
std::string message = "Hello, C++ Programming!";
// 使用 length() 方法
std::cout << "字符串长度: " << message.length() << std::endl;
// 使用 substr() 方法
std::cout << "前 5 个字符: " << message.substr(0, 5) << std::endl;
std::cout << "从索引 7 开始的子字符串: " << message.substr(7) << std::endl;
// 使用 find() 方法
std::string search_word = "Programming";
size_t position = message.find(search_word);
if (position != std::string::npos) {
std::cout << "'" << search_word << "' 在索引位置: " << position << std::endl;
} else {
std::cout << "未找到单词" << std::endl;
}
// 额外的 find() 示例
std::string email = "[email protected]";
size_t at_symbol = email.find('@');
size_t dot_symbol = email.find('.');
std::cout << "用户名: " << email.substr(0, at_symbol) << std::endl;
std::cout << "域名: " << email.substr(at_symbol + 1, dot_symbol - at_symbol - 1) << std::endl;
return 0;
}
关于字符串类方法的关键点:
length()
:返回字符串中的字符数substr()
:提取字符串的一部分
find()
:搜索子字符串或字符
std::string::npos
编译并运行程序:
g++ string_methods.cpp -o string_methods
./string_methods
示例输出:
字符串长度: 23
前 5 个字符: Hello
从索引 7 开始的子字符串: C++ Programming!
'Programming' 在索引位置: 11
用户名: user
域名: example
重要的字符串方法概念:
在本步骤中,你将学习如何在 C 风格字符串和 C++ 字符串类之间进行转换。这些转换在处理 C++ 中不同的字符串表示形式时非常重要。
打开 WebIDE,在 ~/project
目录下创建一个名为 string_conversion.cpp
的新文件:
touch ~/project/string_conversion.cpp
将以下代码添加到 string_conversion.cpp
文件中:
#include <iostream>
#include <string>
#include <cstring>
int main() {
// C 风格字符串转换为 C++ 字符串
const char* c_style_str = "Hello, C++ World!";
std::string cpp_string(c_style_str);
std::cout << "C++ 字符串: " << cpp_string << std::endl;
// C++ 字符串转换为 C 风格字符串
std::string message = "Converting strings";
const char* c_str = message.c_str();
std::cout << "C 风格字符串: " << c_str << std::endl;
// 使用 strcpy 手动转换
char buffer[50];
strcpy(buffer, message.c_str());
std::cout << "复制到缓冲区: " << buffer << std::endl;
// 字符串长度比较
std::cout << "C++ 字符串长度: " << message.length() << std::endl;
std::cout << "C 风格字符串长度: " << strlen(c_str) << std::endl;
return 0;
}
关键转换方法:
std::string(c_style_str)
:将 C 风格字符串转换为 C++ 字符串.c_str()
:将 C++ 字符串转换为 C 风格字符串strcpy()
:手动将字符串复制到字符数组编译并运行程序:
g++ string_conversion.cpp -o string_conversion
./string_conversion
示例输出:
C++ 字符串: Hello, C++ World!
C 风格字符串: Converting strings
复制到缓冲区: Converting strings
C++ 字符串长度: 18
C 风格字符串长度: 18
重要的转换概念:
.c_str()
从 C++ 字符串获取 const char*
strlen()
适用于 C 风格字符串.length()
适用于 C++ 字符串在本步骤中,你将学习如何实现冒泡排序算法来对 C++ 中的数组元素进行排序。冒泡排序是一种简单的排序方法,它反复遍历列表,比较相邻元素,并在顺序错误时交换它们。
打开 WebIDE,在 ~/project
目录下创建一个名为 bubble_sort.cpp
的新文件:
touch ~/project/bubble_sort.cpp
将以下代码添加到 bubble_sort.cpp
文件中:
#include <iostream>
int main() {
// 初始化一个未排序的数组
int numbers[5] = {64, 34, 25, 12, 22};
int size = 5;
// 打印原始数组
std::cout << "原始数组: ";
for (int i = 0; i < size; i++) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
// 冒泡排序实现
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
// 比较相邻元素
if (numbers[j] > numbers[j + 1]) {
// 交换元素
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
// 打印排序后的数组
std::cout << "排序后的数组: ";
for (int i = 0; i < size; i++) {
std::cout << numbers[i] << " ";
}
std::cout << std::endl;
return 0;
}
冒泡排序的关键概念:
编译并运行程序:
g++ bubble_sort.cpp -o bubble_sort
./bubble_sort
示例输出:
原始数组: 64 34 25 12 22
排序后的数组: 12 22 25 34 64
重要的排序注意事项:
在本步骤中,你将学习如何在 C++ 中实现线性搜索算法。线性搜索是一种简单的方法,通过依次检查数组中的每个元素来查找目标元素,直到找到目标或到达数组末尾。
打开 WebIDE,在 ~/project
目录下创建一个名为 linear_search.cpp
的新文件:
touch ~/project/linear_search.cpp
将以下代码添加到 linear_search.cpp
文件中:
#include <iostream>
int linearSearch(int arr[], int size, int target) {
// 遍历数组中的每个元素
for (int i = 0; i < size; i++) {
// 检查当前元素是否与目标匹配
if (arr[i] == target) {
return i; // 如果找到,返回索引
}
}
return -1; // 如果未找到目标,返回 -1
}
int main() {
// 创建一个学生成绩数组
int scores[] = {85, 92, 78, 95, 88, 76, 90};
int size = sizeof(scores) / sizeof(scores[0]);
// 要搜索的目标成绩
int targetScore = 78;
// 执行线性搜索
int result = linearSearch(scores, size, targetScore);
// 显示搜索结果
if (result != -1) {
std::cout << "目标成绩 " << targetScore
<< " 在索引 " << result << " 处找到" << std::endl;
} else {
std::cout << "目标成绩 " << targetScore
<< " 未在数组中找到" << std::endl;
}
// 尝试另一个搜索
int missingScore = 100;
result = linearSearch(scores, size, missingScore);
if (result != -1) {
std::cout << "成绩 " << missingScore
<< " 在索引 " << result << " 处找到" << std::endl;
} else {
std::cout << "成绩 " << missingScore
<< " 未在数组中找到" << std::endl;
}
return 0;
}
线性搜索的关键概念:
编译并运行程序:
g++ linear_search.cpp -o linear_search
./linear_search
示例输出:
目标成绩 78 在索引 2 处找到
成绩 100 未在数组中找到
重要的搜索注意事项:
在本步骤中,你将学习如何使用 getline()
在 C++ 中读取完整的文本输入行。与 cin >>
不同,getline()
可以读取包含空格的字符串,并处理更复杂的输入场景。
打开 WebIDE,在 ~/project
目录下创建一个名为 getline_input.cpp
的新文件:
touch ~/project/getline_input.cpp
将以下代码添加到 getline_input.cpp
文件中:
#include <iostream>
#include <string>
int main() {
// 声明一个字符串以存储输入
std::string fullName;
std::string address;
// 提示输入全名
std::cout << "请输入你的全名: ";
std::getline(std::cin, fullName);
// 提示输入地址
std::cout << "请输入你的完整地址: ";
std::getline(std::cin, address);
// 显示输入并附加信息
std::cout << "\n--- 用户信息 ---" << std::endl;
std::cout << "姓名: " << fullName << std::endl;
std::cout << "地址: " << address << std::endl;
// 演示读取多行输入
std::string multiLineText;
std::cout << "\n请输入多行描述(按 Ctrl+D 结束):" << std::endl;
std::string line;
while (std::getline(std::cin, line)) {
multiLineText += line + "\n";
}
std::cout << "\n你的描述:" << std::endl;
std::cout << multiLineText;
return 0;
}
getline()
的关键概念:
std::getline(input_stream, string_variable)
编译程序:
g++ getline_input.cpp -o getline_input
./getline_input
示例交互:
请输入你的全名: John Michael Smith
请输入你的完整地址: 123 Main Street, Anytown, USA
--- 用户信息 ---
姓名: John Michael Smith
地址: 123 Main Street, Anytown, USA
请输入多行描述(按 Ctrl+D 结束):
这是一个示例
多行描述
包含多行文本。
你的描述:
这是一个示例
多行描述
包含多行文本。
重要的输入处理注意事项:
getline()
读取直到换行符在本实验中,你将学习如何在 C++ 中创建和初始化一维数组,使用索引访问和修改数组元素,实现二维数组以表示矩阵,使用空终止符初始化 C 风格字符串,使用字符串类方法,在 C 风格字符串和字符串类之间进行转换,使用冒泡排序对数组元素进行排序,在数组中实现线性搜索,以及使用 getline()
处理字符串输入。
你将探索不同的数组初始化方法,包括指定大小并初始化所有元素、让编译器确定大小、将所有元素初始化为零以及使用索引手动赋值。你还将学习如何使用索引访问和修改数组元素,以及如何处理数组边界以避免错误。此外,你将使用二维数组、C 风格字符串和字符串类,学习如何在它们之间进行转换并执行各种操作。