当前位置: 首页 > news >正文

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

目录

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

1. 的基本介绍

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

2. 创建和初始化字符串

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

#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 连接字符串

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

std::string str1 = "Hello";
std::string str2 = " World";
std::string result = str1 + str2;   // "Hello World"

3.2 获取字符串长度

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

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

3.3 访问和修改字符

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

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

3.4 字符串比较

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

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

4. 常用字符串成员函数

4.1 append()

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

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

4.2 insert()

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

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

4.3 erase()

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

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

4.4 substr()

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

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

4.5 find() 和 rfind()

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

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()

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

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() 将数字转换为字符串:

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

5.2 字符串转数字

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

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

6. 遍历字符串

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

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

7.大小写转换

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

#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 风格字符串:

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

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

const char* cstr = "Hello";
std::string str(cstr);

9. 总结

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


http://www.mrgr.cn/news/66280.html

相关文章:

  • 微信小程序 https://pcapi-xiaotuxian-front-devtest.itheima.net 不在以下 request 合法域名
  • Machine Learning
  • 算法实现 - 快速排序(Quick Sort) - 理解版
  • 运动控制 电机
  • 从数据提取到管理:TextIn平台的全面解析与产品体验
  • 数据结构之顺序表(C语言)
  • 多线程--模拟实现定时器--Java
  • 了解分布式数据库系统中的CAP定理
  • 【初阶数据结构与算法】复杂度分析练习之轮转数组(多种方法)
  • 华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力2-管理AR会话
  • C++ 高效率整型大数运算项目优化——内置类型存储与计算
  • 数据结构——二叉树(续集)
  • 在Android开发中如何使用OCR获取当前屏幕中的文本?
  • Nop入门:极简AOP实现
  • Android问题 -- DJ多多的下载文件在哪里? DJ多多dat格式转换为mp3
  • LoRA(Low-Rank Adaptation)的工作机制 - 在 GPT-2 的注意力层中添加 LoRA 低秩适配器
  • Git遇到“fatal: bad object refs/heads/master - 副本”问题的解决办法
  • 基于 GADF+Swin-CNN-GAM 的高创新轴承故障诊断模型
  • 41.第二阶段x86游戏实战2-C++实现lua寻路
  • 基于STM32的自动化植物浇灌系统教学
  • 【Qt】使用Qt发送http请求封装一个通用类
  • 劫持微信聊天记录并分析还原 —— 解密数据库(二)
  • 工作中问题
  • 新一代跟踪器StrongSORT: Make DeepSORT Great Again论文解析—让 DeepSORT 再次伟大
  • nacos本地虚拟机搭建切换wiff问题
  • 基于SpringBoot的免税商品优选购物商城的设计与实现