今日字串截取的心得,分享一下。
分享一、截取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”第一次出现的位置
结束:
分享也是自己对问题再次加深理解的方式,可能不全面,但绝对有用,后面将不断完善~