C++ string类详解

从易于编程的角度来看,标准库 string 类和 C 字符串相比多了几个优点。

正如本章前面所述,string 类有若干个成员函数和重载运算符。这些都可以简化任务,例如在一个字符串中查找一个字符或字符串,用 C 字符串执行起来就既困难又繁琐。

本节将回顾一些使用 string 的基本操作,然后讨论更多的 string 类的成员函数。

任何使用 string 类的程序都必须使用 #include 包含 string 头文件。然后可以使用如表 1 所示的构造函数中的任何一个创建 string 对象。

表 1 string构造函数
定 义 描 述
string() 默认构造函数:创建空字符串。示例:string str ();
string(const char *s) 转换构造函数:使用 C 字符串创建一个 string 对象。示例:string name("William Smith");
string(const string &s) 复制构造函数:从现有字符串创建一个新的字符串。示例: string name1(s);

string 类重载的运算符如表 2 所示。

表 2 string 类运算符
重载运算符 描 述
>> 从流中提取字符并将其插入到字符串中。复制字符直至遇到空格或输入的结尾
<< 将字符串插入流中
= 将右侧的字符串赋值给左侧的 string 对象
+= 将右侧字符串的副本附加到左侧的 string 对象
+ 返回将两个字符串连接在一起所形成的字符串
[] 使用数组下标表示法,如 name[x]。返回 x 位置的字符的引用
关系运算符 以下每个关系运算符都将被执行:< > <= >= = !=

string 类还有若干个成员函数。例如,size 函数将返回字符串的长度。表 3 列出了许多 string 类成员函数及其重载的变体。在某些情况下,传递给成员函数的实参可能会使请求的操作不可能。在这些情况下,成员函数将通过拋出异常来指示错误的发生。

表 3 string 类的成员函数
成员函数示例 描 述
theString.append(str); 将 str 追加到 theString。实参 six 可以是一个 string 对象或 C 字符串
theString.append(str, p, n); 从位置 p 开始,str 中的 n 个字符被附加到 theString 中。如果从 p 开始的 str 的子串少于 n 个字符,则会引发异常
theString.append(str, n); C 字符串 str 的前 n 个字符被附加到 theString 中
theString.append(n, ch); 将字符 ch 的 n 个副本附加到 theString 中
theString.assign(str); 将 str 赋值给 theString。形参 str 可以是 string 对象或 C 字符串
theString.assign(str, p, n); 从位置 p 开始,str 中的 n 个字符被赋值给 theString。如果从 p 开始的 str 的子串少于 n 个字符,则会引发异常
theString.at(p); 返回字符串中 p 位置的字符。它与 theString[p] 返回的值是一样的
theString.begin(); 返回指向 theString 中第一个字符的迭代器。
theString.capacity(); 返回 theString 被分配的存储的大小
theString.clear(); 通过删除 theString 中存储的所有字符来清除字符串
theString.compare(str); 以 strcmp 的方式比较 theString 和 str。str 实参可能是一个 string 对象,也可能是一个 C 字符串
theString.copy(str, p, n); 将从 theString 的位置 p 开始的长度为 n 的子串复制到字符数组 str 中。如果 theString 在给定位置 p 之后少于 n 个字符,则会引发异常
theString.c_str(): 返回 theString 对象的 C 字符串值
theString.data(); 返回一个包含 null 终止字符串的字符数组,就像存储在 theString 中的一样
theString.empty(); 如果 theString 为空则返回 true,否则返回 false
theString.end(); 返回指向 theString 中最后一个字符的迭代器。
theString.erase(p, n); 从 theString 的位置 p 开始,删除 n 个字符
theString.find(str, p); 返回在 theString 中找到的 str 字符串的第一个位置。形参 str 可以是 string 对象或 C 字符串。如果没有找到 str,则返回 theString 类的静态成员 string::npos
theString.find(ch, p); 返回在 theString 中找到的 ch 字符的第一个位置。如果没有找到 ch,则返回 string::npos
theString.insert(p, str); 将 str 的副本插入到 theString 中,从位置 p 开始。str 实参可以是 string 对象, 也可以是 C 字符串
theString.length(); 返回 theString 中字符串的长度
theString.replace(p, n, str); 使用 string 对象 str 中的字符替换 theString 中的 n 个字符,从位置 p 开始
theString. size(); 返回 theString 中字符串的长度
theString.substr(p, n); 返回一个子串的副本。子串长度为 n 个字符,从 theString 的 p 位置开始
theString. swap(str); 交换 theString 和 str 的内容