导入
简介
在本章中,我们将探讨 C++ 中最重要的类之一:字符串。 让我们开始吧!
字符串(string)是一系列字符的序列。C++ 提供了多种方法来分析或修改字符串。C++ 字符串是 C 风格字符串 const char* 的安全替代方案。使用字符串需要包含头文件 <string>。
ℹ️ 字符串与 std::vector 非常相似
字符串的行为类似于存储字符的std::vector,其接口也极为相似。这意味着除了字符串类自身的方法外,你还可以使用 标准模板库(STL)中的算法 来操作字符串。
以下代码片段中,std::string name的值为RainerGrimm。我们使用 STL 算法std::find_if找出第一个大写字母,并据此将名字拆分为firstName和lastName两个部分。表达式name.begin()+1表明字符串支持随机访问迭代器:1 2// string versus vector 3... 4#include <algorithm> 5#include <string> 6 7std::string name{"RainerGrimm"}; 8auto strIt= std::find_if(name.begin()+1, name.end(), 9 [](char c){ return std::isupper(c); }); 10if (strIt != name.end()){ 11 std::string firstName= std::string(name.begin(), strIt); 12 std::string lastName= std::string(strIt, name.end()); 13}
字符串是类模板,其参数包括字符类型、字符特性(trait)和分配器(allocator)。其中字符特性和分配器具有默认值。
1template <typename charT, typename traits= char_traits<charT>, typename Allocator= allocator<charT> > 2class basic_string;
C++ 为不同字符类型提供了对应的字符串别名:
1typedef basic_string<char> string; 2typedef basic_string<wchar_t> wstring; 3typedef basic_string<char16_t> u16string; 4typedef basic_string<char32_t> u32string;
ℹ️ std::string 就是通常所说的字符串
在 C++ 中,当我们提到“字符串”时,99% 的情况下指的是针对字符类型char特化的std::basic_string,即std::string。