C++学习系列(5):C++字符串和结构体

C++学习系列(5):C++字符串和结构体

1. 前言

在前面的文章中,我们学习了 数组和指针,本篇博客将重点讲解 C++字符串和结构体

在 C++ 语言中,字符串和结构体是非常重要的概念:

  • 字符串(String):用于存储和操作文本数据。
  • 结构体(Struct):用于定义自定义数据类型,类似于 Python 的字典或 Java 的类。

掌握这两部分内容,将有助于更高效地处理文本数据和组织数据结构。


2. C++字符串(String)

2.1 C 风格字符串(char 数组)

在 C 语言中,字符串是字符数组,以 '\0' 结尾:

#include <iostream>

int main() {
    char str[] = "Hello, C++!";
    std::cout << "字符串内容: " << str << std::endl;
    return 0;
}

📌 特点

  • 字符串本质上是 char 数组
  • 末尾有 '\0'(空字符),表示字符串的结束。

2.2 字符串输入

cin 读取字符串:

#include <iostream>

int main() {
    char name[50];
    std::cout << "请输入你的名字: ";
    std::cin >> name;  // 读取字符串(遇到空格会停止)
    std::cout << "你好, " << name << "!" << std::endl;
    return 0;
}

📌 cin 读取字符串的限制

  • 遇到 空格、换行符 时,输入会结束。
  • cin.getline() 可以读取包含空格的字符串:
std::cin.getline(name, 50);

2.3 string 类(推荐使用)

C++ 提供 string 类(在 <string> 头文件中):

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    std::cout << "字符串: " << str << std::endl;
    return 0;
}

📌 string 类的优势

  • 不需要手动管理 '\0' 结尾。
  • 提供字符串拼接、查找、替换等功能。

2.4 string 的常用操作

#include <iostream>
#include <string>

int main() {
    std::string s1 = "Hello";
    std::string s2 = " C++";

    std::string s3 = s1 + s2;  // 拼接字符串
    std::cout << "拼接后: " << s3 << std::endl;

    std::cout << "字符串长度: " << s3.length() << std::endl;
    std::cout << "是否为空: " << s3.empty() << std::endl;
    std::cout << "查找 'C++': " << s3.find("C++") << std::endl;

    return 0;
}

📌 常用方法

  • .length() 获取字符串长度
  • .empty() 检查是否为空
  • .find("子串") 查找子串位置
  • .substr(start, len) 截取子串
  • .append("str") 追加字符串

3. C++结构体(Struct)

3.1 结构体的定义

结构体是一种 自定义数据类型,用于存储多个不同类型的数据:

#include <iostream>

struct Student {
    std::string name;
    int age;
    float score;
};

int main() {
    Student stu1 = {"张三", 20, 85.5};
    std::cout << "姓名: " << stu1.name << ", 年龄: " << stu1.age << ", 分数: " << stu1.score << std::endl;
    return 0;
}

📌 结构体的作用

  • 类似于 Java 的类(但没有方法)。
  • 用于组织复杂的数据结构(例如存储多个字段)。

3.2 结构体数组

#include <iostream>

struct Student {
    std::string name;
    int age;
};

int main() {
    Student students[2] = {{"张三", 20}, {"李四", 22}};

    for (int i = 0; i < 2; i++) {
        std::cout << "姓名: " << students[i].name << ", 年龄: " << students[i].age << std::endl;
    }

    return 0;
}

📌 结构体数组

  • 结构体可以存储多个对象的数据。
  • 使用 数组 统一管理。

3.3 结构体指针

指针可以指向结构体:

#include <iostream>

struct Student {
    std::string name;
    int age;
};

int main() {
    Student stu = {"王五", 21};
    Student* p = &stu;  // 指针指向结构体

    std::cout << "姓名: " << p->name << ", 年龄: " << p->age << std::endl;
    return 0;
}

📌 结构体指针

  • p->name 等价于 (*p).name
  • 适用于动态分配内存的结构体。

3.4 结构体嵌套

结构体可以包含另一个结构体:

#include <iostream>

struct Address {
    std::string city;
    std::string street;
};

struct Student {
    std::string name;
    int age;
    Address addr;  // 嵌套结构体
};

int main() {
    Student stu = {"赵六", 23, {"北京", "长安街"}};
    std::cout << "姓名: " << stu.name << ", 城市: " << stu.addr.city << std::endl;
    return 0;
}

📌 结构体嵌套

  • 允许更复杂的数据组织。

4. 结构体与 new 动态分配

结构体可以使用 new 进行动态分配:

#include <iostream>

struct Student {
    std::string name;
    int age;
};

int main() {
    Student* p = new Student{"张三", 20};

    std::cout << "姓名: " << p->name << ", 年龄: " << p->age << std::endl;

    delete p;  // 释放内存
    return 0;
}

📌 动态分配

  • new Student{"张三", 20} 分配结构体内存
  • delete p 释放内存,防止内存泄漏

5. 小结与展望

在本篇博客中,我们学习了:
C 风格字符串(char 数组)
C++ string 类及其操作
结构体的定义、结构体数组、指针和嵌套
结构体的动态分配

🎯 字符串和结构体是 C++ 编程的重要组成部分,在文件处理、数据库操作等场景中广泛使用。

在下一篇 C++学习系列(6) 中,我们将深入学习 C++面向对象编程(OOP),敬请期待!🚀


💡 如果你喜欢这篇文章,欢迎点赞、收藏,并关注本系列!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值