一、题目
1141:删除单词后缀
时间限制: 1000 ms 内存限制: 65536 KB
提交数:39031 通过数: 26736
【题目描述】
给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否则不进行任何操作。
【输入】
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为32)。
【输出】
输出按照题目要求处理后的单词。
【输入样例】
referer
【输出样例】
refer
二、解析
这个题可以这样想:
1、如何删掉后缀?
删掉,是不是就是不输出那个后缀呀呢?所以我们只需要找到这个单词有这个后缀,然后输出后缀前面的部分就可以啦。
比如 referer 这个单词,它字符串长度为7,所以最后一个单词的下标就为6(注意下标是从0开始的哟)。所以我们只需要输出0到5这个下标范围的字符就可以啦.像这样。
string s;
cin>>s;
for(int i=0; i<=5; i++) cout<<s[i];
2、删掉哪些后缀?
题目要我们找到以er、ly或者ing后缀结尾的单词,然后删掉这个单词的后缀。所以我们的后缀可以分为两种,一种是只有两个字母结尾的er和ly;另一种是ing结尾的。
我们怎么找到哪些单词后缀是er、ly或者ing呢?
后缀,肯定是单词的最后的几个字母呀,所以我们可以用函数得到字符串的长度,然后判断最后几位是否是单词相应的单词。比如我们要找后缀是否是ing,我们就可以这样做
end = s.size()-1;//最后一位
if(s[end-2]=='i'&&s[end-1]=='n'&&s[end]=='g')
//用循环输出字符串后缀之前的字母
为什么要分为两种呢?
你看我们输出字符串的时候,循环的尾巴是不是就可以用字符长度减去2,减去3来控制了呀,所以我们就可以分成两种情况,用if,else if来完成。
三、代码
#include<bits/stdc++.h>
using namespace std;
int main() {
string s;
cin>>s;
int end = s.size()-1;//最后一位
if(s[end-1]=='e'&&s[end]=='r'||s[end-1]=='l'&&s[end]=='y')
for(int i=0; i<=end-2; i++) cout<<s[i];
else if(s[end-2]=='i'&&s[end-1]=='n'&&s[end]=='g')
for(int i=0; i<=end-3; i++) cout<<s[i];
return 0;
}