删除字符串中的子串 (20 分)
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
这里用到了两个知识点,C++ string中的find()函数 和 C++ 中 string::npos
find()函数的作用是指出字符串a中b首次出现的位置,并返回其位置的值;
用法:字符串a.find(字符串b);
当然了用法远远不止是这个,还有很多,这里只是在本题中用到的。
string::npos不是很懂,通过看网上的一些博客,了解到的:
npos 是一个常数,用来表示不存在的位置,类型一般是std::container_type::size_type 许多容器都提供这个东西。取值由实现决定,一般是-1(取自https://blog.csdn.net/linwh8/article/details/50752733)
这里的题其实将string::npos改为-1也没问题。
/*删除字符串中的子串*/
#include <bits/stdc++.h>
using namespace std;
int main (void){
string a, b;
getline(cin, a);
getline(cin, b);
int len2 = b.length();
while((a.find(b))!=string::npos){
a.replace(a.find(b), len2, "");
}
cout << a << endl;
return 0;
}