L1-5 别再来这么多猫娘了C++题解

文章讲述了在C++中解决一个审查AI生成内容的编程问题,涉及到违禁词检测、替换以及输出格式的要求。作者提到了一种简单的处理违禁词的方法,并指出完全的解决方案可能较为复杂。
摘要由CSDN通过智能技术生成

L1-5 别再来这么多猫娘了!

前言 C++题解

13分的原因就是这道题有两个样例违禁词中含有替换词的子串,赛后想了一下最简单的处理方式是用其他的词来代替违禁词然后再用替换词把这个违禁词换掉,试了一下这个想法是可以的15分没问题;但是这种就是一种并不完全对的题解,完全的题解太麻烦了,L1的题2分说实话不值得了这么拿(大佬当我没说)

题面

你的工作是实现一个审查内容的代码,用于对 AI 生成的内容的初步审定。更具体地说,你会得到一段由大小写字母、数字、空格及 ASCII 码范围内的标点符号的文字,以及若干个违禁词以及警告阈值,你需要首先检查内容里有多少违禁词,如果少于阈值个,则简单地将违禁词替换为;如果大于等于阈值个,则直接输出一段警告并输出有几个违禁词。(备注:没用的题面我就删掉了)

输入格式:

输入第一行是一个正整数 N (1≤N≤100),表示违禁词的数量。接下来的 N 行,每行一个长度不超过 10 的、只包含大小写字母、数字及 ASCII 码范围内的标点符号的单词,表示应当屏蔽的违禁词。
然后的一行是一个非负整数 k (0≤k≤100),表示违禁词的阈值。
最后是一行不超过 5000 个字符的字符串,表示需要检查的文字。
从左到右处理文本,违禁词则按照输入顺序依次处理;对于有重叠的情况,无论计数还是替换,查找完成后从违禁词末尾继续处理。

输出格式:

如果违禁词数量小于阈值,则输出替换后的文本;否则先输出一行一个数字,表示违禁词的数量,然后输出 H e X i e N i Q u a n J i a ! He Xie Ni Quan Jia! HeXieNiQuanJia!

代码

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;;
int n, k, cnt; // cnt记录数量
vector<string> s;	// 记录违禁词
string t, r = "<censored>", c, w = "*-*-*-*-*-*";	// r原本的替换词,w新的替换词,c用来读换行符

void solve()
{
	cin >> n;
	getline(cin, c);	//读换行符,getchar也可以
	// 初始化违禁词,没什么好说的
	for (int i = 0; i < n; i ++ ) {
		getline(cin, t);
		s.push_back(t);
	}
	cin >> k;
	t.clear();
	getline(cin, c);	// 读换行符,用getchar也可以
	getline(cin, t);	 // 读入要检查的字符串
	// 查找违禁词然后替换成w
	for (int i = 0; i < n; i ++ ) {
		int f = 0;
		while (f < t.size()) {
			f = t.find(s[i], f);
			if (f >= t.size()) break;
			cnt ++ ;
			t.replace(f, s[i].size(), w);
			f += w.size();
		}
	}
	// 这里如果违禁词超出阈值就直接输出cnt和警告
	if (cnt >= k) {
		cout << cnt << endl;
		cout << "He Xie Ni Quan Jia!" << endl;
		return;
	}
	// 查找w,替换成r
	int f = 0;
	while (f < t.size()) {
		f = t.find(w, f);
		if (f >= t.size()) break;
		t.replace(f, w.size(), r);
		f += r.size();
	}
	cout << t << endl;
}

int main()
{
	ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	solve();
	return 0;
}

最后碎碎念一下,c++的replace为什么只能替换一个……,会Python的同学可以用一下Python应该很简单就可以秒了

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值