String(三)———接口大全

目录

一、string构造函数接口(Construct string object)

二、析构函数接口​编辑

三、赋值重载函数接口

四、迭代器接口

五、string下的size和length接口

 六、max_size接口

七、clear接口

八、capacity 和 empty接口

九、reserve接口

十、resize接口

十一、shrink_to_fit 接口

十二、 string元素访问接口

十三、operator += 接口

十四、append 接口

十五、push_back、pop_back 接口

十六、insert、erase 接口

十七、assign、replace接口

十八、c_str 接口

十九、copy接口

二十、find、rfind接口

二十一、find_first_of 接口

二十二、compare 接口

二十三、substr 接口

二十四、getline接口


一、string构造函数接口(Construct string object)

这个接口我在string(二)中详细说明了,在此不再赘述。

详情可见博客————

https://blog.csdn.net/SAKURAjinx/article/details/127585347

二、析构函数接口

 与构造函数相对,~string()是析构函数,在对象脱离其作用域(例如它所在函数调用结束)时系统自动调用,清理释放对象开辟的空间。

三、赋值重载函数接口

 它有三种用法,单个字符赋值、字符串赋值、string对象赋值。

	string s1 = "a";
	string s2 = "hello";
	string s3 = s1 + s2;

四、迭代器接口

 begin、end为正向迭代器,rbegin、rend为反向迭代器;cbegin、cend为const正向迭代器,crbegin、crend为const反向迭代器。

在string(二)中详细介绍了,在此不多赘述。

https://blog.csdn.net/SAKURAjinx/article/details/127585347

五、string下的size和length接口

string是字符串,length表示长度,size表示大小,应该都能显示字符串当前长度,那为什么会存在两个意义相同的接口呢?

 六、max_size接口

   这个接口目前来看没有什么意义,也基本不会用到,是设计问题。

七、clear接口

八、capacity 和 empty接口

1、 capacity是容量,不是指string的长度,而是指string目前所能容纳的字符数。它是const修饰的,无法通过该接口直接修改容量大小,除非用reserve接口改变。

这里的capacity在不同平台下也有不同,像g++编译器下capacity计算的是string的所有字符数(包括 \0 );而像VS 2013下计算的是string的有效字符数(不包括 \0),这种差别也体现在扩容等接口上(Push_back)。

2、empty接口是用来判断string是否长度为0,可用作循环结束条件。

九、reserve接口

reserve是保留的意思,它可以为capacity预留足够的空间。

 

 原本capacity的大小是15,reserve(30)后变为31,VS 2013平台下大致是按(n*16-1)的方式扩容的。

十、resize接口

 resize可以改变size的大小,它的用处比较广,主要是分三种情况:

1、resize参数比size小

此时会截去多余部分,只改变size,不改变capacity。

 2、resize参数介于size和capacity之间

此时会填补size到capacity之间的位置(用空字符 \0)

3、resize参数比capacity大

此时会扩容,而后填补size与capacity之间的位置,同样是用 \0

十一、shrink_to_fit 接口

 缩减string的容量capacity,使得它能符合size 的大小,不一定是要和size一样大,可以比size略大,只要在合理范围内。

十二、 string元素访问接口

一、运算符重载operator [ ]

对[ ] 进行重载,使用下标进行元素访问。

二、at 接口

std :: string :: at可用于从字符串中提取字符。

它会自动进行检查,如果越界将会抛异常。

三、front、back

分别替换头尾的字符。用得不多,毕竟有size存在。

十三、operator += 接口

 

十四、append 接口

 append是在string后面添加字符串,有6种方式:

1、直接添加其他string对象

2、添加string对象的部分,从第subpos位开始,尾插sublen个字符

3、直接添加字符串

4、添加一个字符串的前n个字符

5、添加n个C字符

6、添加一个string对象的部分,从first 到 last

十五、push_back、pop_back 接口

 push_back在string后面增加一个字符。

 pop_back截去string末尾的一个字符。

十六、insert、erase 接口

 

 insert 与 erase 是在字符串任意位置插入、删除数据,用得不多,如果不是在头尾插入删除数据会涉及移动数据降低效率,所以一般是用头插尾删。

十七、assign、replace接口

 assign是用一个新的字符串赋值给原先的(覆盖原先的),使用方法与 operator+=、insert大同小异,只不过不是拼接字符串,而是覆盖。

 replace也是替换,只不过是指定位置pos覆盖,assign 与 replace不同,assign是覆盖全部(赋值)不管原先和现在字符串的长度,replace是覆盖部分。

十八、c_str 接口

 c_str可以将string类型转化成C语言的字符串数组类型,返回的是一个临时指针(不能操作该指针),指针指向字符串的第一个字符。

十九、copy接口

 返回指定部分字符串的长度,从pos位置开始,长度为len,并会将这段字符串指针拷贝给s。

二十、find、rfind接口

一、 find接口的 1、2、4用法差不多,都是从指定位置找相应的字符 / 字符串。

 第一个是从string  s0中找string s1,没有给出参数pos,默认为0,也就是从头开始找;返回找到的string类型字符串首元素下标 (类型size_t)

第二个是从string  s0中找字符串" 789",给出参数pos = 1,从下标为1处开始找;返回找到的字符串首元素下标 (类型size_t)

第三个是从string  s0中找字符 ' 0 ' ,给出参数pos = 5,从下标为5处开始找。返回找到的字符下标 (类型size_t)

 

 二、

if (found!=std::string::npos)

这里find返回值返回的是size_t,而不是int,C语言通常下标返回都是int,如果找不到对应元素就返回负值(如-1),但是这里设计的找不到返回的是std::npos,不同平台下实现的具体值不一样。

测试:在VS 2019下为size_t 最大值:

三、find的第3个用法是从pos位置开始找字符串s的前n位,返回最先找到的下标。

 

四、rfind与find相对,是从后往前找

 

 

二十一、find_first_of 接口

该接口是去寻找与给出的字符串或string对象中匹配的字符,是最先出现匹配字符的分割字符串中第一个出现的匹配字符。

 如果是循环进行的话,可以依次找出字符串中所有的匹配字符。

 find_first_of / find_last_of 这些接口不怎么常用,需要的时候查阅即可。

二十二、compare 接口

 比较string对象 / 字符串,返回值为int, ==0 则相等。

	std::string str1("green apple");
	std::string str2("red apple");
	//字符串str1与str2对比
	if (str1.compare(str2) != 0)
		std::cout << str1 << " is not " << str2 << '\n';
	//str1从下标6开始5个字符,与"apple"对比
	if (str1.compare(6, 5, "apple") == 0)
		std::cout << "still, " << str1 << " is an apple\n";
	//str2.size()-5下标处开始5个字符,与"apple"对比
	if (str2.compare(str2.size() - 5, 5, "apple") == 0)
		std::cout << "and " << str2 << " is also an apple\n";
	//str1下标6处开始5个字符,与str2下标4开始5个字符对比
	if (str1.compare(6, 5, str2, 4, 5) == 0)
		std::cout << "therefore, both are apples\n";

二十三、substr 接口

 从指定位置开始拷贝,拷贝长度为len,如果len > 字符串剩余长度,则拷贝到结尾停止,返回string类型对象。

二十四、getline接口

 getline也属于流提取的一种,它可以输入带有空格的字符串以及带有空格的字符数组。

看一道OJ题了解一下:

#include <iostream>
using namespace std;

int main() {
    string s;
    getline(cin,s);
    int pos = s.rfind(' ');
    cout<<s.size()-pos-1<<endl;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值