c++字符串常用语法特性查询示例文档(一)
在 C++中,除了std::string
和std::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::u16string
和std::u32string
std::u16string
和std::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::ostringstream
和std::ostringstream
std::ostringstream
和std::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::wstring
、std::u16string
、std::u32string
:支持宽字符和 Unicode,适合多语言支持的场景。
• std::ostringstream
和std::istringstream
:字符串流,适合复杂的字符串拼接和解析的场景。
• std::array<char, N>
和std::vector<char>
:字符数组,适合处理固定大小或动态大小的字符数据。