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; // 字符串拼接
相关推荐
Olrookie8 分钟前
若依前后端分离版学习笔记(五)——Spring Boot简介与Spring Security
笔记·后端·学习·spring·ruoyi
小白的代码日记24 分钟前
基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
java·spring boot·后端
Chaney不会代码40 分钟前
Java7/8中的HashMap深挖
后端
新程快咖员44 分钟前
兄弟们,你们安装IDEA 2025.2了吗?java编辑器代码提示失效?临时解决方案新鲜出炉!
后端·intellij idea
调试人生的显微镜1 小时前
移动端网页调试实战,跨设备兼容与触控交互问题排查全流程
后端
onejason1 小时前
《PHP 爬虫实战指南:获取淘宝店铺详情》
前端·后端·php
码事漫谈1 小时前
你的代码可能在偷偷崩溃!
后端
dylan_QAQ2 小时前
【附录】Spring容器的启动过程是怎样的?
后端·spring
白应穷奇2 小时前
编写高性能数据处理代码 02
后端·python
这个做不了2 小时前
基于模板方法与工厂模式的多支付公司/产品接入方案
后端