【GESP】C++三级练习 luogu-B2119 删除单词后缀
GESP三级练习,字符串练习(C++三级大纲中6号知识点,字符串),难度★★☆☆☆。
luogu-B2119 删除单词后缀
题目要求
题目描述
给定一个单词,如果该单词以
er
、ly
或者ing
后缀结尾,则删除该后缀(题目保证删除后缀后的单词长度不为 $0$),否则不进行任何操作。
输入格式
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为 $32$)。
输出格式
输出按照题目要求处理后的单词。
输入输出样例 #1
输入 #1
1
referer
输出 #1
1
refer
题目分析
解题思路
题目要求判断单词是否以特定后缀(er、ly、ing)结尾,并删除这些后缀。
- 解题思路分析:
- 需要判断字符串末尾是否匹配指定的后缀
- 使用字符串的截取功能来获取和比较后缀
- 分四种情况处理输出结果:er结尾、ly结尾、ing结尾、其他
- 具体思路:
- 读入一个字符串word
- 使用string的substr函数检查后缀:
- 检查是否以”er”结尾
- 检查是否以”ly”结尾
- 检查是否以”ing”结尾
- 如果都不是,保持原样
- 根据后缀情况截取并输出结果
- 时间复杂度分析:
- string的substr函数时间复杂度为O(k),k为截取长度
- 总体时间复杂度为O(1),因为只需要检查固定长度的后缀
- 空间复杂度为O(n),其中n为输入字符串的长度
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <string>
int main() {
// 定义字符串变量用于存储输入的单词
std::string str;
// 从标准输入读取单词
std::cin >> str;
// 判断单词是否以"er"或"ly"结尾
if (str.substr(str.length() - 2, str.length()) == "er" ||
str.substr(str.length() - 2, str.length()) == "ly") {
// 如果是,删除最后两个字符并输出
std::cout << str.substr(0, str.length() - 2) << std::endl;
}
// 判断单词是否以"ing"结尾
else if (str.substr(str.length() - 3, str.length()) == "ing") {
// 如果是,删除最后三个字符并输出
std::cout << str.substr(0, str.length() - 3) << std::endl;
}
// 如果不是以上任何后缀结尾
else {
// 直接输出原单词
std::cout << str;
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权