C++——复合数据类型(数组、字符串)

复合数据类型

1. 数组:存储相同类型数据的集合

  • 数组的概念: 数组是一种可以存储相同数据类型多个元素的线性数据结构。

  • 数组的声明: 声明数组需要指定数组的类型、名称和元素的个数(大小)。

    c++ 复制代码
    int numbers[5];  // 声明一个可以存储 5 个整数的数组
    double prices[10]; // 声明一个可以存储 10 个双精度浮点数的数组
  • 数组的初始化: 可以在声明数组的同时进行初始化。

    c++ 复制代码
    int numbers[5] = {1, 2, 3, 4, 5};  // 初始化数组的 5 个元素
    double prices[3] = {19.99, 29.95, 99.99};

    部分初始化: 如果初始化时提供的元素少于数组的大小,剩余的元素将自动初始化为 0(对于数值类型)。

    c++ 复制代码
    int scores[5] = {80, 90}; // scores[0] = 80, scores[1] = 90, scores[2] = 0, scores[3] = 0, scores[4] = 0

    省略大小的初始化: 如果初始化时提供了所有元素的初始值,可以省略数组的大小。

    c++ 复制代码
    int data[] = {10, 20, 30}; // 编译器会自动推断数组大小为 3
  • 数组下标: 数组中的每个元素都有一个唯一的索引,称为下标 。C++ 中数组的下标从 0 开始 ,因此,一个大小为 n 的数组,其元素的下标范围是从 0n-1

  • 访问数组元素: 使用数组名和下标来访问数组中的特定元素。

    c++ 复制代码
    cout << numbers[0] << endl; // 输出数组 numbers 的第一个元素
    numbers[2] = 100;          // 将数组 numbers 的第三个元素赋值为 100

    注意: 访问超出数组边界的下标会导致未定义的行为,可能会导致程序崩溃或产生不可预测的结果。这是 C++ 中需要特别注意的地方。

  • 示例:编写程序,计算数组元素的平均值

    c++ 复制代码
    #include <iostream>
    using namespace std;
    
    int main() {
        int numbers[5] = {10, 20, 30, 40, 50};
        int sum = 0;
    
        // 使用 for 循环遍历数组
        for (int i = 0; i < 5; i++) {
            sum += numbers[i];
        }
    
        // 将 sum 强制转换为 double 类型,以获得浮点数结果
        double average = static_cast<double>(sum) / 5;
    
        cout << "数组元素的平均值为: " << average << endl;
        return 0;
    }
  • 练习: 创建一个包含 10 个整数的数组,并找出数组中的最大值和最小值。

2. 字符串:处理文本数据

  • C 风格字符串的概念: 在 C++ 中,C 风格字符串本质上是字符数组 ,用于存储一串字符。它的一个重要特点是以空字符 \0 作为结束标志。这个空字符标志着字符串的结尾。

  • C 风格字符串的声明和初始化:

    c++ 复制代码
    char str1[] = "hello"; // 编译器会自动在末尾添加 '\0'
    char str2[6] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 必须手动添加 '\0'
    char str3[10] = "world"; // 剩余的位置会被初始化为 '\0'

    注意: 声明字符数组来存储字符串时,必须确保数组的大小足够容纳字符串的所有字符以及结尾的空字符 \0

  • 使用下标访问 C 风格字符串中的字符: 可以像访问普通数组元素一样,使用下标来访问 C 风格字符串中的单个字符。

    c++ 复制代码
    cout << str1[0] << endl; // 输出 'h'
    str2[1] = 'E';          // 将 str2 的第二个字符修改为 'E'
  • string 类:C++ 标准库提供的字符串处理方式

    C++ 标准库 <string> 头文件提供了一个功能强大的 string 类,它比 C 风格字符串更方便、更安全。string 对象可以自动管理内存,无需手动处理字符串的长度和结尾的空字符。

  • string 对象的定义、输入输出以及常用操作:

    c++ 复制代码
    #include <iostream>
    #include <string> // 引入 string 头文件
    using namespace std;
    
    int main() {
        // 定义并初始化 string 对象
        string str1 = "hello";
        string str2;
    
        // 输入字符串
        cout << "请输入一个字符串: ";
        cin >> str2;
    
        // 输出字符串
        cout << "str1: " << str1 << endl;
        cout << "str2: " << str2 << endl;
    
        // 一些常用的 string 操作
        cout << "str1 的长度: " << str1.length() << endl; // 获取字符串长度
        cout << "str1 和 str2 的拼接: " << str1 + " " + str2 << endl; // 字符串拼接
相关推荐
咖啡Beans7 分钟前
Python工具DrissionPage推荐
后端·python
华仔啊43 分钟前
工作5年没碰过分布式锁,是我太菜还是公司太稳?网友:太真实了!
java·后端
卿·静1 小时前
Node.js对接即梦AI实现“千军万马”视频
前端·javascript·人工智能·后端·node.js
SamDeepThinking2 小时前
在 Cursor IDE 中配置 SQLTools 连接 MySQL 数据库指南(Windows 11)
后端·ai编程·cursor
武子康2 小时前
大数据-92 Spark 深入解析 Spark Standalone 模式:组件构成、提交流程与性能优化
大数据·后端·spark
青梅主码2 小时前
麦肯锡最新发布报告《想打破生产力天花板吗?重新思考完成工作的方式》:与其一味调整组织结构,不如从根本上简化工作流程,释放更大价值
后端
Python私教2 小时前
源滚滚Rust全栈班v1.02 无符号整数详解
开发语言·后端·rust
绝无仅有2 小时前
面试总结之Nginx 经验常见问题汇总第二篇
后端·面试·github
这里有鱼汤2 小时前
分享7种常见的量化交易策略
后端
绝无仅有3 小时前
面试实战总结之Nginx配置经验第一篇
后端·面试·github