2. string 类型的成员函数
在上节课的示例中我们见到 s1.length() 可以返回 s1 字符串的长度为 5。这是字符串类型的变量(对象)的成员函数的用法。
成员函数是某个变量(对象)内部的函数。它可以借助于对应的变量(对象)来调用,并返回调用此成员函数的结果。
字符串常用的成员函数
成员函数
说明
容量相关
size 或 length返回字符串长度,不含尾零
'\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 个字节。
实验:
查看参考手册,尝试使用字符串其他的成员函数。