1 条题解
-
0
自动搬运
来自洛谷,原作者为

Jorisy
之所以能够离去而义无反顾 / 仅因我记得你已厌倦的梦 / 连最后的道别都稀薄的风中 / 用加倍的叛逆做出抗争搬运于
2025-08-24 21:07:26,当前版本为作者最后更新于2021-07-05 20:15:03,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
提供一种较为
玄学做法。
我们先不看这种做法,先来看一个 的做法:#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; cout<<(s.find("er",0)==s.size()-2||s.find("ly",0)==s.size()-2?s.substr(0,s.size()-2):(s.find("ing",0)==s.size()-3?s.substr(0,s.size()-3):s)); return 0; }这种方法是想按序找到后缀,然后删除,然而像输入
singing时,其不是我们所希望的sing,而是singing。因为先找到的是s后的子串ing。
既然正着不行,那就——倒着找!
这里涉及到函数reverse()及size(),详见此。但除此还涉及到find()和erase()。
对于
find()函数的用法:这个函数共有两个参数,一个是查找子串,一个是开始查找位置,对于查找,其会返回首次查到到位置;若找不到,则会返回string::npos。如在字符串I Love Luogu.中查找子串Luogu,会返回 。
对于erase()函数的用法:这个函数也有两个参数,一个是删除子串的起始位置,一个是删除子串的长度。如在字符串I Don't Love Luogu.中删除子串Don't,则字符串变成I Love Luogu.。
完整代码:#include<bits/stdc++.h> using namespace std; int main() { string s; cin>>s; reverse(s.begin(),s.end());//第一次翻转 //由于翻转了,所以子串也要翻转 if(s.find("re",0)==0||s.find("yl",0)==0) s.erase(0,2);//删除长度是二的 else if(s.find("gni",0)==0) s.erase(0,3);//删除长度是三的 reverse(s.begin(),s.end());//重新翻转回来 cout<<s; return 0; }
- 1
信息
- ID
- 6976
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 1
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者