C++ <string> 标头文件详解

目录

  • [1. <string> 的基本介绍](#1. <string> 的基本介绍)
  • [2. 创建和初始化字符串](#2. 创建和初始化字符串)
  • [3. 字符串的基本操作](#3. 字符串的基本操作)
    • [3.1 连接字符串](#3.1 连接字符串)
    • [3.2 获取字符串长度](#3.2 获取字符串长度)
    • [3.3 访问和修改字符](#3.3 访问和修改字符)
    • [3.4 字符串比较](#3.4 字符串比较)
  • [4. 常用字符串成员函数](#4. 常用字符串成员函数)
    • [4.1 append()](#4.1 append())
    • [4.2 insert()](#4.2 insert())
    • [4.3 erase()](#4.3 erase())
    • [4.4 substr()](#4.4 substr())
    • [4.5 find() 和 rfind()](#4.5 find() 和 rfind())
    • [4.6 replace()](#4.6 replace())
  • [5. 字符串转换](#5. 字符串转换)
    • [5.1 数字转字符串](#5.1 数字转字符串)
    • [5.2 字符串转数字](#5.2 字符串转数字)
  • [6. 遍历字符串](#6. 遍历字符串)
  • 7.大小写转换
  • [8. std::string 和 C 风格字符串的互操作](#8. std::string 和 C 风格字符串的互操作)
  • [9. 总结](#9. 总结)

1. 的基本介绍

是 C++ 标准库中的头文件之一,定义了 std::string 类。std::string 是一个动态大小的字符序列,可以像数组一样通过下标访问字符,同时支持自动内存管理。在 C++ 中,std::string 替代了 C 风格的字符串(字符数组),让我们能够更方便、灵活地处理文本数据。

2. 创建和初始化字符串

std::string 支持多种初始化方式:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello, World!";   // 直接初始化
    std::string str2("Hello, C++");       // 构造函数初始化
    std::string str3(10, 'A');            // 用字符 'A' 初始化10次,得到 "AAAAAAAAAA"
    std::string str4 = str1;              // 复制初始化

    std::cout << "str1: " << str1 << "\n";
    std::cout << "str2: " << str2 << "\n";
    std::cout << "str3: " << str3 << "\n";
    std::cout << "str4: " << str4 << "\n";

    return 0;
}

3. 字符串的基本操作

3.1 连接字符串

可以使用 + 操作符来连接字符串:

cpp 复制代码
std::string str1 = "Hello";
std::string str2 = " World";
std::string result = str1 + str2;   // "Hello World"

3.2 获取字符串长度

使用 size() 或 length() 获取字符串的长度:

cpp 复制代码
std::string str = "Hello";
std::cout << "Length: " << str.size() << "\n";  // 输出:Length: 5

3.3 访问和修改字符

可以通过下标访问和修改字符串中的字符:

cpp 复制代码
std::string str = "Hello";
str[0] = 'h';
std::cout << str << "\n";  // 输出:hello

3.4 字符串比较

std::string 提供了直接比较运算符,支持 ==、!=、<、> 等操作符来比较字符串的字典顺序。

cpp 复制代码
std::string str1 = "Apple";
std::string str2 = "Banana";
if (str1 < str2) {
    std::cout << "Apple comes before Banana\n";
}

4. 常用字符串成员函数

4.1 append()

用于在字符串末尾追加内容。

cpp 复制代码
std::string str = "Hello";
str.append(" World");
std::cout << str << "\n";  // 输出:Hello World

4.2 insert()

用于在指定位置插入字符串。

cpp 复制代码
std::string str = "Hello World";
str.insert(5, ", C++");
std::cout << str << "\n";  // 输出:Hello, C++ World

4.3 erase()

用于删除字符串中的指定字符。

cpp 复制代码
std::string str = "Hello, C++ World";
str.erase(5, 5);  // 从位置5开始,删除5个字符
std::cout << str << "\n";  // 输出:Hello World

4.4 substr()

用于提取字符串中的子串。

cpp 复制代码
std::string str = "Hello, World";
std::string sub = str.substr(0, 5);  // 提取从位置0开始的5个字符
std::cout << sub << "\n";  // 输出:Hello

4.5 find() 和 rfind()

用于查找子字符串的位置。

cpp 复制代码
std::string str = "Hello, World";
size_t pos = str.find("World");
if (pos != std::string::npos) {
    std::cout << "Found 'World' at position: " << pos << "\n";
}

4.6 replace()

用于替换字符串中的某个部分。

cpp 复制代码
std::string str = "Hello, C++";
str.replace(7, 3, "World");  // 从位置7开始,替换3个字符为"World"
std::cout << str << "\n";  // 输出:Hello, World

5. 字符串转换

5.1 数字转字符串

可以使用 std::to_string() 将数字转换为字符串:

cpp 复制代码
int num = 42;
std::string str = std::to_string(num);
std::cout << str << "\n";  // 输出:42

5.2 字符串转数字

可以使用 std::stoi、std::stof、std::stod 等函数将字符串转换为数字:

cpp 复制代码
std::string str = "42";
int num = std::stoi(str);
std::cout << num << "\n";  // 输出:42

6. 遍历字符串

可以用 for 循环或基于范围的 for 循环遍历字符串中的每个字符:

cpp 复制代码
std::string str = "Hello";
for (char c : str) {
    std::cout << c << ' ';
}
// 输出:H e l l o

7.大小写转换

在 C++ 中,可以使用 库中的 std::toupper 和 std::tolower 函数将字符串转换为大写或小写。这两个函数会将一个字符转换为大写或小写,配合 for 循环可以轻松实现对整个字符串的转换。

cpp 复制代码
#include <iostream>
#include <string>
#include <cctype>  // 包含 toupper 和 tolower 函数

int main() {
    std::string str = "Hello, World!";
    for (char &c : str) {
        c = std::toupper(c);  // 转换每个字符为大写
    }
    std::cout << "Uppercase: " << str << "\n";  // 输出:HELLO, WORLD!
    return 0;
}

8. std::string 和 C 风格字符串的互操作

使用 c_str() 函数可以获得 std::string 对应的 C 风格字符串:

cpp 复制代码
std::string str = "Hello";
const char* cstr = str.c_str();
printf("%s\n", cstr);  // 使用 printf 输出 C 风格字符串

可以直接用 std::string 的构造函数从 C 风格字符串初始化:

cpp 复制代码
const char* cstr = "Hello";
std::string str(cstr);

9. 总结

std::string 是一个功能丰富、强大的类,极大简化了 C++ 中的字符串处理。通过std::string,我们可以轻松完成字符串的创建、修改、查找、转换等操作,而不用担心手动管理内存。

相关推荐
papership33 分钟前
【入门级-C++程序设计:12、文件及基本读写-文件的基本概念&文本文件的基本操作】
开发语言·c++·青少年编程
SaleCoder2 小时前
用Python构建机器学习模型预测股票趋势:从数据到部署的实战指南
开发语言·python·机器学习·python股票预测·lstm股票模型·机器学习股票趋势
玩代码7 小时前
备忘录设计模式
java·开发语言·设计模式·备忘录设计模式
岁忧8 小时前
(nice!!!)(LeetCode 面试经典 150 题 ) 30. 串联所有单词的子串 (哈希表+字符串+滑动窗口)
java·c++·leetcode·面试·go·散列表
技术猿188702783518 小时前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具
放飞自我的Coder8 小时前
【colab 使用uv创建一个新的python版本运行】
开发语言·python·uv
SunkingYang8 小时前
MFC/C++语言怎么比较CString类型最后一个字符
c++·mfc·cstring·子串·最后一个字符·比较
界面开发小八哥8 小时前
MFC扩展库BCGControlBar Pro v36.2新版亮点:可视化设计器升级
c++·mfc·bcg·界面控件·ui开发
R-G-B8 小时前
【15】MFC入门到精通——MFC弹窗提示 MFC关闭对话框 弹窗提示 MFC按键触发 弹窗提示
c++·mfc·mfc弹窗提示·mfc关闭弹窗提示·mfc按键触发 弹窗提示
艾莉丝努力练剑8 小时前
【数据结构与算法】数据结构初阶:详解顺序表和链表(四)——单链表(下)
c语言·开发语言·数据结构·学习·算法·链表