题解:B4048 [语言月赛 202410] 断章取义
前言
Update in
题目传送门。
这题似乎有坑,搞了半天!~可能对别的大佬来说很简单!~
思路
我们使用string提供的find函数直接搜索字符串中是否存在子串
你会获得
题目中说,每一轮剪辑找到 WA。
设
- 错误方法:第一轮结束后
S=\texttt{not} ,第二轮结束后S 为空,剪辑轮数为2 。 - 正确方法:第一轮把所有
\texttt{not} 删了,S 为空,剪辑轮数为1 。
我们每次遍历一遍 substr判断是否有 erase删除
你会获得
设 i++了,否则就会少检测一次。
设
第一轮把 i++,所以
我们循环时不写i++,当 i++。
如果你是像我这样写的话,你就错了:
for(int i=0;i<s.size()-2;)
你会获得 RE。
s.size()的类型是size_t,size_t只能存无符号整数,故不能存负数,当
我们将s.size()强制转整。
这样就
Code
while(s.find("not")!=string::npos){
for(int i=0;i<(int)s.size()-2;){
if(s.substr(i,3)=="not") s.erase(i,3);
else i++;
}
c++;
}
总结
所以我们以后要养成好习惯,尽量把s.size()强制转整。