string<C++标准库>的函数

函数

  • 构造表示

  • 字符访问

    • string::at – 访问特定字符,带边界检查

    • string::operator[] – 访问特定字符

    • string::front – 访问第一个字符

    • string::back – 访问最后一个字符

    • string::data – 访问基础数组

    • string::c_str – 返回对应于字符串内容的C风格零结尾的只读字符串。

    • string::substr – 获取子串。参数为空时取全部源串

    • string::copy – 拷贝出一段字符到C风格字符串。有溢出危险。

  • 迭代器

    • string::begin – 获得指向开始位置的迭代器

    • string::end – 获得指向末尾的迭代器

    • string::rbegin – 获得指向末尾的逆向迭代器

    • string::rend – 获得指向开始位置的逆向迭代器

    • string::cbegin – 获得指向开始位置的只读迭代器

    • string::cend – 获得指向末尾的只读迭代器

    • string::crbegin – 获得指向末尾的逆向只读迭代器

    • string::crend – 获得指向开始位置的逆向只读迭代器

  • 容量

    • string::empty – 检查是否为空

    • string::size – 返回数据的字符长度

    • string::length – 返回数据的字符长度,与size()完全相同

    • string::max_size – 返回可存储的最大的字节容量,在32位Windows上可能为43亿字节.

    • string::reserve – 改变string的字符存储容量,实际获得的存储容量不小于reserve的参数值。

    • string::capacity – 返回当前的字符存储容量

    • string::shrink_to_fit (C++11新增) – 降低内存容量到刚好

  • 修改器

    • string::clear – 清空内容

    • string::insert – 插入字符或字符串。目标string中的插入位置可用整数值或迭代器表示。如果参数仅为1个迭代器,则在其所指位置插入0值。

    • string::erase – 删除1个或1段字符

    • string::push_back – 追加1个字符

    • string::append – 追加字符或字符串

    • string::operator+= – 追加,只有一个参数。不具有append()的可以追加源字符串的子串的功能。

    • string::pop_back – 删除最后一个字符

    • string::resize – 改变(增加或减少)字符串长度。如果增加了字符串长度,新字符缺省为0值。

    • string::swap – 与另一个string交换内容

    • string::replace – 替换子串。如果替换源数据与被替换数据的长度不等,则结果字符串的长度发生了改变。

  • 搜索

    • string::find – 前向搜索特定子串的第一次出现

    • string::rfind – 从尾部开始,后向搜索特定子串的第一次出现

    • string::find_first_of – 搜索指定字符集合中任意字符在被搜索string中的第一次出现

    • string::find_last_of – 搜索指定字符集合中任意字符在被搜索string中的最后一次出现

    • string::find_first_not_of – 被搜索string中的不属于指定字符集合的首个字符

    • string::find_last_not_of – 被搜索string中的不属于指定字符集合的末个字符

    • string::compare – 与参数字符串比较

  • 非成员函数

    • std::operator+ – 字符串连接

    • std::operator!= – 不等比较

    • std::operator== – 相等比较

    • std::operator< – 小于比较

    • std::operator<= – 小于等于比较

    • std::operator> – 大于比较

    • std::operator>= – 大于等于比较

    • std::operator<< – 字符串内容写到输出流中

    • std::operator>> – 从输入流中读取一个字符串

    • std::getline – 从istream中读入一行或一段字符到string中

    • std::swap – 交换两个string的内容。是 std::swap算法针对std::basic_string的特化版本

    • std::stoi – 字符串转为×××

    • std::stol – 字符串转为长×××

    • std::stoll – 字符串转为长长×××

    • std::stoul – 字符串转为无符号长×××

    • std::stoull – 字符串转为无符号长长×××

    • std::stof – 字符串转为单精度浮点形

    • std::stod – 字符串转为双精度浮点形

    • std::stold – 字符串转为长双精度浮点形

    • std::to_string – 整型、无符号整型、浮点型转化为string

    • std::to_wstring – 整型、无符号整型、浮点型转化为wstring

    • std::hash<std::string> – 计算hash值

    • std::hash<std::wstring> – 计算hash值

    • std::hash<std::u16string> – 计算hash值

    • std::hash<std::u32string> – 计算hash值

  • 常量值

    • string::npos – 表示“未找到”,值为statci const unsigned -1

用法

#include <iostream>
#include <string>
 
int main()
{
    std::string foo = "fighters";
    std::string bar = "stool";
 
    // "!=" compares string contents for inequality, even though they are different objects.
    if (foo != bar)
    {
        std::cout << "The strings are different." << std::endl;
    }
 
    // Prints "stool fighters" by creating a temporary object, which is automatically freed.
    std::cout << bar + " " + foo << std::endl;
 
    return 0;
}

结果:

The strings are different.
stool fighters

由于字符串的拷贝操作与其字节长度成比例,是O(n)量级。且创建字符串的临时栈对象的成本开销。因此string一般作为常量引用(reference-to-const)以避免不必要的拷贝:

void print_the_string(const std::string& str){
    std::cout << str;}

c_str()成员函数返回string类的C语言风格字符串(即ASCII-零串)的指针,用于C语言字符串的互操作。如果不需要零结尾的字符串,那么成员函数data()返回不一定是0结尾的字符串的内存地址。