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,我们可以轻松完成字符串的创建、修改、查找、转换等操作,而不用担心手动管理内存。

相关推荐
DARLING Zero two♡4 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.15——深入理解指针(4)
c语言·开发语言·科技
混迹网络的权某5 分钟前
蓝桥杯真题——三角回文数(C语言)
c语言·开发语言·算法·蓝桥杯·改行学it
爱上语文12 分钟前
苍穹外卖 商家取消、派送、完成订单
java·开发语言·spring boot·后端
墨柳烟20 分钟前
ABAQUS高亮显示网格节点方法:Python为每个节点建立集合
开发语言·前端·python·abaqus
SUN_Gyq1 小时前
C/C++中数组定义和初始化的方式有哪些?数组名字有什么含义?
java·c语言·c++
1 9 J1 小时前
数据结构 C/C++(实验一:线性表)
c语言·数据结构·c++
小笨猪-1 小时前
RabbitMQ高级特性
java·开发语言·redis·rabbitmq
神仙别闹1 小时前
基于 Java 语言双代号网络图自动绘制系统
java·开发语言
猫爪笔记1 小时前
JAVA基础:单元测试;注解;枚举;网络编程 (学习笔记)
java·开发语言·单元测试
螺蛳粉只吃炸蛋的走风1 小时前
网络编程IO多路复用之poll模式
网络·c++·面试·poll·阻塞与非阻塞