C++STL——string类

目录

1.string类的文档链接

2.string的定义方式

3.string的插入

①使用insert插入

②使用push_back尾插

4.string的删除

①使用erase删除

②使用pop_back尾删

5.string的拼接(append函数)

6.string的查找

7.string的交换(swap函数)

8.string的大小和容量

①capacity函数获取当前对象所分配的存储空间的大小

②size函数或length函数获取当前有效字符的个数

③resize函数改变当前对象的有效字符的个数

④reserve函数改变当前对象的容量大小

⑤clear函数清空对象

⑥empty函数判空

9.string中元素的访问

②使用at访问对象中的元素

③范围for访问对象中的元素

④使用迭代器访问对象中的元素

10.string中的getline函数

11.string中子字符串的提取(substr函数)

substr函数提取string中的子字符串

12.string与字符串之间的转换

①c_str函数将string转换为字符串

②将字符串转换为string

13.string中运算符的使用

operator+=


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类文档。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值