[C++]洛谷B2119 删除单词后缀

题干

题目描述

给定一个单词,如果该单词以 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输出一下就完成了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值