题目:

屏蔽不文明字词(1)

题目解析

看注释

代码

#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;
}