目录
1.string类的文档链接
https://cplusplus.com/reference/string/string/
2.string的定义方式
string(); //构造一个空字符串
string(const string& str); //拷贝构造str
string(const string& str, size_t pos, size_t len = npos); //拷贝str中从字符位置pos开始连续len个字符的部分
string(const char* s); //复制s所指的字符序列
string(const char* s, size_t n); //复制s所指字符序列的前n个字符
string(size_t n, char c); //实现一个n个c字符的字符串
代码示列:
int main()
{
string s("pride");
const char* cs = "lov";
string s1;
string s2(s);
string s3(s, 3, 4);
string s4(cs);
string s5(cs, 2);
string s6(5, 'e');
}
3.string的插入
①使用insert插入
1.string& insert (size_t pos, const string& str);
2.string& insert (size_t pos, const char* s);
代码示列:
string s("pride");
string s1("lov");s.insert(3, s1);
s.insert(0, "long");
②使用push_back尾插
void push_back (char c);
代码示列:
string s("pride");
s.push_back('o');
4.string的删除
①使用erase删除
string& erase (size_t pos = 0, size_t len = npos);//从pos位置删除len个字符
iterator erase (iterator p);//pos位置
iterator erase (iterator first, iterator last);//迭代器区间
代码示列:
string s("long pride");
s.erase(6, 2);
s.erase(s.end()-1);
s.erase(s.begin() + 1, s.end()-1);
②使用pop_back尾删
void pop_back();
代码示列:
string s("long pride");
s.pop_back();
s.pop_back();
5.string的拼接(append函数)
append常用接口
1.string& append (const string& str);
2.string& append (const char* s);
3.string& append (size_t n, char c);
代码示列:
string s("pri");
string s1("de");
s.append(s1);
const char* cs = "long";
s.append(cs);
s.append(2, 'e');
6.string的查找
①find函数正向搜索第一个匹配项
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (char c, size_t pos = 0) const;
代码示列:
string s("long pride is pound");
string fs("prde is");
size_t fpos = s.find(fs);
size_t pos = s.find("ride");//第二个参数为缺省参数,不写默认从开始位置
size_t pos1 = s.find('g');
cout << fpos << endl;//没找到,返回的是4294967295
cout << pos << endl;//6
cout << pos1 << endl;//3
②rfind函数反向搜索第一个匹配项
size_t rfind (const string& str, size_t pos = npos) const;
size_t rfind (const char* s, size_t pos = npos) const;
size_t rfind (char c, size_t pos = npos) const;
代码示列:
string s("long pride is pound");
string fs("pride is");
size_t fpos = s.rfind(fs);
size_t pos = s.rfind("ride");
size_t pos1 = s.rfind('i');
cout << fpos << endl;//5
cout << pos << endl;//6
cout << pos1 << endl;//11
7.string的交换(swap函数)
swap函数常用接口
void swap (string& x, string& y);
void swap (string& str);
代码示列
string s("pride");
string s1("intell");
string s2("pound");
swap(s, s1);
s.swap(s2);
8.string的大小和容量
①capacity函数获取当前对象所分配的存储空间的大小
size_t capacity() const;
代码示列
string s("pound");
size_t capa = s.capacity();
cout << capa << endl;//15,说明可用空间为15
②size函数或length函数获取当前有效字符的个数
size_t size() const;
size_t length() const;
代码示列
string s("long is free");
cout << s.size() << endl;//12
cout << s.length() << endl;//12
③resize函数改变当前对象的有效字符的个数
void resize (size_t n);
void resize (size_t n, char c);
代码示列
string s("long is free");
s.resize(15);
s.resize(16, '#');
cout << s << endl;//打印 long is free#
cout << s.size() << endl;//16
cout << s.length() << endl;//16
resize函数的性质
1、当n大于对象当前的size时,将size扩大到n,扩大空间用字符c填充,若c未显示,则默认为’\0’。
2、当n小于对象当前的size时,将size缩小到n。
string s("long is free");
s.resize(6);
cout << s << endl;//打印 long i
cout << s.size() << endl;//6
④reserve函数改变当前对象的容量大小
void reserve (size_t n = 0);
reserve函数的性质
1、当n大于对象当前的capacity时,将capacity扩大到n或大于n。
2、当n小于对象当前的capacity时,什么也不做。
注:此函数对字符串的size没有影响,无法操作字符串内容
代码示列
string s("leetcode");
cout << s.capacity() << endl;//15
s.reserve(16);
cout << s.capacity() << endl;//31
⑤clear函数清空对象
void clear();
代码示列
string s("pride");
s.clear();
⑥empty函数判空
bool empty() const;
代码示列
string s("pride");
s.clear();
cout << s.empty() << endl;//打印1
9.string中元素的访问
①[ ]+下标访问
char& operator[] (size_t pos);//可修改对象内容
const char& operator[] (size_t pos) const;//const修饰
代码示列
string s("long is pride");
for (int i = 0; i < s.size(); i++)
{
s[i] += 1;//可修改对象内容
cout << s[i] << " ";}
②使用at访问对象中的元素
char& at (size_t pos);
const char& at (size_t pos) const;
代码示列
for (int i = 0; i < s.size(); i++)
{
s.at(i) += 1;
cout << s.at(i) << " ";
}
③范围for访问对象中的元素
for (auto& e : s)//修改必须是引用做参数
{
e += 1;
}
for (char e : s)//auto自动推导类型,也可显示写
{
cout << e << " ";
}
④使用迭代器访问对象中的元素
string::iterator it = s.begin();
while (it != s.end())
{
*it += 1;//修改
cout << *it << " ";
it++;
}
10.string中的getline函数
使用cin或scanf输入时,遇到空格或者\0就会停止,那么如何读一整行字符?使用getline函数即可
①读到\n符停止
istream& getline (istream& is, string& str);
代码示列
string s;
getline(cin, s);getline函数将从is中提取到的字符存储到str中,直到读取到换行符’\n’为止
②读到delim字符停止
istream& getline (istream& is, string& str, char delim);
代码示列
string s;
getline(cin, s, 'd');
getline函数将从is中提取到的字符存储到s中,直到读取到分隔符delim或换行符’\n’为止
11.string中子字符串的提取(substr函数)
substr函数提取string中的子字符串
string substr (size_t pos = 0, size_t len = npos) const;
代码示列
string s("study is good thing");
string s1 = s.substr(6, 7);
cout << s1 << endl;//打印 is good
12.string与字符串之间的转换
①c_str函数将string转换为字符串
const char* c_str() const;
代码示列
string s("pride");
const char* str = s.c_str();
cout << str+3;//从第三个位置开始打印 de
②将字符串转换为string
代码示列
const char* str = "pride";
string s(str);是不是很熟悉,就是string定义的一种
13.string中运算符的使用
operator+=
string& operator+= (const string& str);
string& operator+= (const char* s);
string& operator+= (char c);
代码示列
string s("pride");
string s1(" is");
const char* str = " good";
s += s1;
s += str;
s += '!';
其他运算符以及其他string类函数可参考string类文档。