题干
题目描述
给定一个单词,如果该单词以 er、ly 或者 ing 后缀结尾,则删除该后缀(题目保证删除后缀后的单词长度不为 0),否则不进行任何操作。
输入格式
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 32)。
输出格式
输出共 1 行:
输出按照题目要求处理后的单词。
样例
样例输入
referer
样例输出
refer
答案解析
食用提示
没看过string相关函数用法的这道题可能做不出来,建议先去看看这篇(作者原创)
AC代码
正常思路版:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s, s1, s2, ans;
cin >> s;
int len = s.size();
int pos_ing = s.rfind("ing");
int pos_er = s.rfind("er");
int pos_ly = s.rfind("ly");
if(pos_ing != string::npos && pos_ing > len - 4){
s.erase(pos_ing);
}
else if(pos_er != string::npos && pos_er > len - 3){
s.erase(pos_er);
}
else if(pos_ly != string::npos && pos_ly > len - 3){
s.erase(pos_ly);
}
cout << s;
return 0;
}
AC代码详细解析
头文件部分
<iostream>
用于输入输出
<string>
是字符串和它的部分操作(这里有我写的详解)
<algorithm>
是sort, reverse等函数
主程序
8~12行代码
前两行定义输入
len
为输入字符串s的长度
pos_ing
, pos_er
, pos_ly
为ing, er和ly在输入字符串s中出现的最后的位置.详情还是看这里
12行以后的代码
if和两个else if判断 ing, er, ly 是否出现过和出现的位置是否符合条件(是否是从后3或2位开始).
如果是的, 那就用erase()抹除后缀(这里只需要start第一个参数, 因为length不填默认就删除到最后一个字符).
最后cout输出一下就完成了.