2. string 类型的成员函数

在上节课的示例中我们见到 s1.length() 可以返回 s1 字符串的长度为 5。这是字符串类型的变量(对象)的成员函数的用法。

成员函数是某个变量(对象)内部的函数。它可以借助于对应的变量(对象)来调用,并返回调用此成员函数的结果。

字符串常用的成员函数

成员函数
说明
容量相关
sizelength
返回字符串长度,不含尾零'\0'
max_size
返回字符串能容纳的最大字符数。
capacity
返回为当前字符串分配的存储空间的大小。
empty
判断当前字符串是否为空。
修改相关
clear
清空字符串中的内容。
insert
在字符串内插入一个或多个字符。
erase
删除一个或多个字符。
push_back
向字符串末尾加入一个字符。
append
向字符串末尾加入一个或多个字符。
replace
在指定位置替换字符串。
copy
将字符串的部分内容复制到指定的字符数组,并填充尾零'\n'
swap
交换两个字符串的内容。
查找相关
find
从字符串左侧查找指定的字符或字符串。
rfind
从字符串右侧查找指定的字符或字符串。
操作相关
compare
比较字符串。
substr
返回子字符串。
c_str
以 C 语言中的 const char * 指针的形式返回字符串的内容,并以 \0 结尾。但不可以通过该指针修改字符串的内容。

其他成员函数

详见参考手册:https://en.cppreference.com/cpp/string/basic_string

示例

// filename: str_mem.cpp
#include <string>
#include <iostream>

int main(int argc, const char * argv[]) {
    std::string s1 = "Hello";
    std::string s2 = "c++";

    // 获取容量信息 
    std::cout << "s1:" << s1 << std::endl;
    std::cout << "s2:" << s2 << std::endl;
    std::cout << "s1.size():" << s1.size() << std::endl;
    std::cout << "s2.length():" << s2.length() << std::endl;
    std::cout << "s1.max_size():" << s1.max_size() << std::endl;
    std::cout << "s1.capacity():" << s1.capacity() << std::endl;

    // 交换字符串
    s1.swap(s2);
    std::cout << "s1:" << s1 << std::endl;
    std::cout << "s2:" << s2 << std::endl;

    return 0;
}

编译和运行结果如下:

weimz@mzstudio:~$ g++ -o str_mem str_mem.cpp
weimz@mzstudio:~$ ./str_mem 
s1:Hello
s2:c++
s1.size():5
s2.length():3
s1.max_size():9223372036854775806
s1.capacity():15
s1:c++
s2:Hello

因为字符串 std::string 是使用动态数组的方式来存储数据,数据存储在动态分配的内存中,因此为了计算方便。对字符串分配的内存空间可能会大于实际存储的字符的长度。如 s1.size() 返回 5,加上后面的尾零'\n'实际只占用 6 个字节,但实际为 s1 分配的存储空间是 15 个字节。

实验:

查看参考手册,尝试使用字符串其他的成员函数。