- lizexuan's blog
liwenfang001 屏蔽不文明字词(1)
- 2023-5-14 15:26:31 @
题目:
题目解析
看注释
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
string original, shield, original_1 /*original_1是备份的original,因为最后要输出原串修改后的,不改大小写*/;
getline(cin, original);
getline(cin, shield); //整行输入用getline
original_1 = original;
int len_original = original.length(), len_shiels = shield.length(); //长度
transform(original_1.begin(), original_1.end(), original_1.begin(), ::tolower); //transform为STL函数,全部小写
transform(shield.begin(), shield.end(), shield.begin(), ::tolower); //同上
auto post = original_1.find(shield); //auto关键词,find查找是否包含
if (post != shield.npos) { //如果没查找到会返回shield.nops也就是末尾
while (post != shield.npos) { //重复转换直到没有
int postre = len_shiels + post;
for (int i = post; i < postre; i++) { //post返回的是首个字母的下标+长度
original_1[i] = '*'; //转换为'*'
}
post = original_1.find(shield); //继续查找
}
for (int i = 0; i < len_original; i++) {
if (original_1[i] != '*' && original[i] != original_1[i]) { //如果不是'*'且和原文不符合及大小写不同
cout << original[i]; // 输出原内容
} else {
cout << original_1[i]; //否则正常输出
}
}
} else {
cout << "Pass"; //没查找到输出'Pass'
}
cout << endl;
return 0;
}