• 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 的内容

更多...

加载中...