今日报错系列:函数 substr 截取 string 中的一段

今日字串截取的心得,分享一下。

分享一、截取string某个’子字串’之后至结束

示例如题:
将字符串:“aaa bbb ccc , I love CSDN !” 中字符串 “ I ”之后的全部截取。
【虽然示例这里字符串中只有 ‘I’ 一个字符,但道理不变】

#include <iostream>
using namespace std;

int main()
{
    
    
	string str = "aaa bbb ccc , I love CSDN !";
	int pos = str.find("I"); // 在字符串str中找到字符串 "I" 出现的位置
	string str2 = str.substr(pos); // 在字符串str中,从"I" 出现的位置开始截取至结束
	cout <<"截取后的字符串为:" << str2.c_str() << endl;
}

输出:

截取后的字符串为:I love CSDN !

总结 : str.substr(pos);表示从pos位置开始,到字符串最后一位截取的字符串

分享二、截取string变量的某一段

示例如题:
在字符串:“aaa bbb ccc , I love CSDN !” 中,从14位置往后截取13个字符。

#include <iostream>
using namespace std;

int main()
{
    
    

	string str = "aaa bbb ccc , I love CSDN !";
	string str2 = str.substr(14,13); // 14表示要截取的字符串的开始的位置,13代表要截取的字符串的长度。
	cout << "截取后的字符串为:" << str2.c_str() << endl;
}

输出:

截取后的字符串为:I love CSDN !

总结 :str.substr(pos, n); pos表示要截取的字符串的开始的位置,n代表要截取的字符串的长度。

分享三、补充 c_str()

估计细心的同学发现了,在输出string时,是这样输出的

str2.c_str()

为什么给后面加了 .c_str 呢?
因为如果不加,会这样报错

错误	C2679	二进制“<<: 没有找到接受“std::string”类型的右操作数的运算符(或没有可接受的转换)

原因是:是String类型没有重载 << 符号

所以在输出string的时候,通过调用c_str()方法,即可解决。

分享四、补充 find()

上面分享一中用到了str.find(“I”);

返回的是字符串“I”第一次出现的位置

结束:

分享也是自己对问题再次加深理解的方式,可能不全面,但绝对有用,后面将不断完善~

猜你喜欢

转载自blog.csdn.net/hwx802746/article/details/112170506