【STL】string之erase()/find()/string::npos

题意:在第一行输入一个句子,第二行输入一个关键词,然后在第一行句子中无限删去关键词直到不存在关键词为止并且输出。

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a, b;
	getline(cin, a);
	getline(cin, b);
	while (a.find(b) != string::npos)//如果找到了(如果没有没找到)
	{
		a.erase(a.find(b), b.length());
	}
	cout << a;
	return 0;
}

这里我们运用到了string中find()函数的用法.
a.find()返回首字母下标

string::npos表示没找到的意思
查找字符串a是否包含子串b,不是用strA.find(strB) > 0 而是 strA.find(strB) != string:npos其中string:npos是个特殊值,说明查找没有匹配

接下来是关于string中erase()函数的用法:

#include<iostream>
#include<string>
using namespace std;

int main(){
    string str = "hello c++! +++";
    // 从位置pos=10处开始删除,直到结尾
    // 即: " +++"
    str.erase(10);
    cout << '-' << str << '-' << endl;
    // 从位置pos=6处开始,删除4个字符
    // 即: "c++!"
    str.erase(6, 4);
    cout << '-' << str << '-' << endl;
    return 0;
}

即从给定起始位置pos处开始删除, 要删除字符的长度为n, 返回值修改后的string对象引用

发布了71 篇原创文章 · 获赞 5 · 访问量 3400

猜你喜欢

转载自blog.csdn.net/Rainfoo/article/details/103238925