2.3.2string类对象的容量操作
- 本部分会介绍以下几个容器操作:
函数名称 | 功能说明 |
size(重点) | 返回字符串有效字符长度 |
length | 返回字符串有效字符长度 |
capacity | 返回空间总大小 |
empty (重点) | 检测字符串释放为空串,是返回true,否则返回false |
clear (重点) | 清空有效字符 |
reserve (重点) | 为字符串预留空间** |
relational operators (重点) | relational operators (重点) |
- operator+
连接字符串,返回一个新构造的string对象,其值由lhs中的字符和rhs中的字符拼接而成。
- getline (重点)
getline(istream& is, string& str, char delim);
🔥这个形式的函数从输入流is中读取一行文本,并将其存储在str字符串中,直到遇到指定的分隔符delim为止。如果没有指定分隔符,则默认为换行符。读取的分隔符不包括在存储的字符
- 符串中。
int main() { string line; char delim = ':'; cout << "Enter a line with as delimiter :" << endl; getline(cin, line, delim); cout << "You entered:" << line << endl; return 0; }
getline(istream& is, string& str);
- 🔥这个形式的函数从输入流is中读取一行文本,并将其存储在str字符串中,直到遇到换行符为止。读取的换行符不包括在存储的字符串中。
- operator>> (重点)
从流中提取字符串,从输入流中提取一个字符串,将该序列存储在str中,str被覆盖(之前的str值被替换)。
该函数重载运算符>>,使其行为与istream::operator>>中描述的一样,适用于c-string对象。
提取出的每个字符都会像调用push_back成员一样被添加到字符串中。
请注意,istream提取操作使用空格作为分隔符。因此,这个操作只会从流中提取可以认为是单词的内容。要提取整行文本,请参阅全局函数getline的字符串重载。
- operator<< (重点)
向流中插入字符串,将符合str的值的字符序列插入到os中。
- relational operators (重点)
这个后面写模拟实现的时候,会详细讲解
2.4String非常用接口说明
- insert
在pos(或p)指定的字符之前插入额外的字符:
- 🔥intsert不会将\0插入进去 的,string不推荐经常使用insert,能少用就少用
int main() { string s1("world"); s1.insert(0, "hello"); cout << s1 << endl; s1.insert(5, " "); cout << s1 << endl; return 0; }
- erase
从字符串中删除字符,删除字符串的一部分,减少其长度:
- 第一种:擦除字符串值中从字符位置pos开始并跨越len字符的部分(如果内容太短或len为string::npos,则擦除直到字符串末尾)。注意,默认实参会擦除字符串中的所有字符(类似于成员函数clear)。
- 第二种:擦除指向p的字符。
- 第三种:擦除[first,last)范围内的字符序列。
string s2("hello world"); s2.erase(5, 1); cout << s2 << endl;
当删除的字符的个数超过了字符的个数会怎么样?
- replace
int main() { string s1("world"); s1.insert(0, "hello"); cout << s1 << endl; s1.insert(5, " "); cout << s1 << endl; return 0; }