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

c++字符串常用语法特性查询示例文档(一)

在 C++中,除了std::stringstd::string_view,还有其他一些与字符串相关的类型,它们各自针对不同的场景进行了优化。以下是一些常见的字符串类型及其使用方式和适用场景的汇总。


C++字符串类型汇总与使用指南

1.std::string

std::string是 C++标准库中最常用的字符串类型,用于存储和管理动态字符串数据。

1.1 特点

• 动态分配内存,可以动态调整大小。

• 提供丰富的字符串操作方法,如拼接、查找、替换等。

• 适合需要频繁修改字符串的场景。

1.2 使用示例

#include <iostream>
#include <string>int main() {std::string str = "Hello, ";str += "World!"; // 拼接字符串std::cout << "Concatenated string: " << str << std::endl;// 查找子字符串size_t pos = str.find("World");if (pos != std::string::npos) {std::cout << "Found 'World' at position: " << pos << std::endl;}// 替换子字符串str.replace(pos, 5, "C++");std::cout << "Replaced string: " << str << std::endl;return 0;
}

输出

Concatenated string: Hello, World!
Found 'World' at position: 7
Replaced string: Hello, C++!

1.3 适用场景

• 需要动态修改字符串内容的场景。

• 需要频繁拼接、查找、替换字符串的场景。


2.std::string_view

std::string_view是一个非拥有型的字符串视图,用于高效地传递和处理字符串片段。

2.1 特点

• 不分配内存,只是对已有字符串的视图。

• 性能高,适合只读操作。

• 适合传递字符串片段,避免不必要的拷贝。

2.2 使用示例

#include <iostream>
#include <string>
#include <string_view>int main() {std::string str = "Hello, World!";std::string_view sv = str; // 从 std::string 创建std::string_view sv2 = "C-style string"; // 从 C 风格字符串创建std::cout << "std::string_view: " << sv << std::endl;std::cout << "std::string_view from C-string: " << sv2 << std::endl;// 拼接字符串std::string result = sv + " " + sv2;std::cout << "Concatenated result: " << result << std::endl;return 0;
}

输出

std::string_view: Hello, World!
std::string_view from C-string: C-style string
Concatenated result: Hello, World! C-style string

2.3 适用场景

• 只读操作,如函数参数传递。

• 需要高效处理字符串片段的场景。


3.std::wstring

std::wstring是用于处理宽字符(wchar_t)的字符串类型,适合处理多语言环境下的字符串。

3.1 特点

• 动态分配内存,可以动态调整大小。

• 提供丰富的字符串操作方法,与std::string类似。

• 适合处理宽字符(如 Unicode)。

3.2 使用示例

#include <iostream>
#include <string>int main() {std::wstring wstr = L"Hello, ";wstr += L"World!"; // 拼接宽字符字符串std::wcout << L"Concatenated string: " << wstr << std::endl;return 0;
}

输出

Concatenated string: Hello, World!

3.3 适用场景

• 处理多语言环境下的字符串。

• 需要支持宽字符的场景。


4.std::u16stringstd::u32string

std::u16stringstd::u32string是 C++11 引入的用于处理 UTF-16 和 UTF-32 字符的字符串类型。

4.1 特点

• 动态分配内存,可以动态调整大小。

• 提供丰富的字符串操作方法,与std::string类似。

• 适合处理 UTF-16 和 UTF-32 字符。

4.2 使用示例

#include <iostream>
#include <string>int main() {std::u16string u16str = u"Hello, ";u16str += u"World!"; // 拼接 UTF-16 字符串std::wcout << L"Concatenated UTF-16 string: " << u16str << std::endl;std::u32string u32str = U"Hello, ";u32str += U"World!"; // 拼接 UTF-32 字符串std::wcout << L"Concatenated UTF-32 string: " << u32str << std::endl;return 0;
}

输出

Concatenated UTF-16 string: Hello, World!
Concatenated UTF-32 string: Hello, World!

4.3 适用场景

• 处理 UTF-16 和 UTF-32 字符。

• 需要支持 Unicode 的场景。


5.std::ostringstreamstd::ostringstream

std::ostringstreamstd::istringstream是用于字符串流操作的类,适合复杂的字符串拼接和解析。

5.1 特点

• 提供流式操作接口,支持复杂的字符串拼接和解析。

• 动态分配内存,可以动态调整大小。

5.2 使用示例

#include <iostream>
#include <sstream>
#include <string>int main() {// 使用 std::ostringstream 拼接字符串std::ostringstream oss;oss << "Hello, " << "World!" << " This is a test.";std::string result = oss.str();std::cout << "Concatenated string: " << result << std::endl;// 使用 std::istringstream 解析字符串std::istringstream iss(result);std::string word;while (iss >> word) {std::cout << "Parsed word: " << word << std::endl;}return 0;
}

输出

Concatenated string: Hello, World! This is a test.
Parsed word: Hello,
Parsed word: World!
Parsed word: This
Parsed word: is
Parsed word: a
Parsed word: test.

5.3 适用场景

• 复杂的字符串拼接。

• 字符串解析和处理。

总结

C++提供了多种与字符串相关的类型和工具,每种类型都有其独特的特点和适用场景。以下是一个简单的总结:

std::string:动态字符串,适合需要频繁修改字符串的场景。

std::string_view:字符串视图,适合只读操作和高效传递字符串片段的场景。

std::wstringstd::u16stringstd::u32string:支持宽字符和 Unicode,适合多语言支持的场景。

std::ostringstreamstd::istringstream:字符串流,适合复杂的字符串拼接和解析的场景。

std::array<char, N>std::vector<char>:字符数组,适合处理固定大小或动态大小的字符数据。

http://www.xdnf.cn/news/535933.html

相关文章:

  • 包装类(1)
  • 22-内部FLASH
  • java day13
  • JVM 垃圾回收器
  • EX文件浏览器:功能强大的安卓文件管理工具
  • 特征值与特征向量的计算——PCA的数学基础
  • 扫描项目依赖漏洞
  • Go语言八股文之分库分表
  • 中服云生产线自动化智能化调度生产系统:打造智能制造新标杆
  • 前端子项目打包集成主项目实战指南
  • 高校快递物流管理系统设计与实现(SpringBoot+MySQL)
  • 1.3.3 数据共享、汇聚和使用中的安全目标
  • 蓝桥杯框架-LED蜂鸣器继电器
  • 大中型水闸安全监测系统解决方案
  • C++初阶-vector的底层
  • 解决RAGFlow部署中镜像源拉取的问题
  • 单点登录是是什么?具体流程是什么?
  • 计算圆周率 (python)
  • select * from 按时间倒序排序
  • AT_abc401_d [ABC401D] Logical Filling 题解
  • 经典密码学和现代密码学的结构及其主要区别(1)凯撒密码——附py代码
  • 酒店运营中一次性用品选购要点及扬州卓韵酒店用品的专业咨询服务
  • 初识函数------了解函数的定义、函数的参数、函数的返回值、说明文档的书写、函数的嵌套使用、变量的作用域(全局变量与局部变量)
  • C++ 关于C++中IO流的相关内容 stringstream的相关介绍
  • 「卫星百科」四维高景系列卫星
  • 从API到UI:直播美颜SDK中的滤镜与贴纸功能开发与落地方案详解
  • 理解UDP协议
  • 【二分 优先队列】P3611 [USACO17JAN] Cow Dance Show S|普及+
  • 天才简史——Paolo Fiorini与他的速度障碍法
  • 禁止在Windows命令行输入python后跳转Microsoft Store