删除单词后缀

GitHub跳转原题关系图返回列表

检查单词末尾是否命中 er/ly/ing 后缀,命中则删除并输出,否则原样输出。

OJ: roj

题目 ID: 1141

难度:入门

标签:字符串模拟

创建: 2026-09-29 20:38

更新: 2026-10-05 03:21

题目描述

给定一个单词(不含空格,长度不超过 32)。若它以 er、ly 或 ing 结尾,则删除该后缀(保证删除后长度不为 0);否则不操作。输出处理后的单词。

输入一行一个单词;输出一行处理后的单词。

思路

把三个后缀放进数组,依次比较单词末尾是否匹配,命中即用 \0 截断。因三个后缀末字符各不相同,最多命中一个,判断顺序不影响结果。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 20:38
# update_at: 2026-10-04 14:27

import sys

# 题面给的三种后缀,按题面顺序排列;删除后单词长度不为 0,所以单词不会就是后缀本身
SUFFIXES = ("er", "ly", "ing")


def solve() -> None:
    """读入一个单词,命中 er / ly / ing 后缀就删掉,否则原样输出。"""
    data = iter(sys.stdin.buffer.read().split())
    word = next(data).decode()
    # 三个后缀的末尾两字符分别是 er / ly / ng,互不相同,因此最多命中一个,顺序无关
    suffix = next((tail for tail in SUFFIXES if word.endswith(tail)), "")
    print(word.removesuffix(suffix))  # 后缀为空串时 removesuffix 原样返回,省掉 if-else


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-05 03:21
 * update_at: 2026-10-05 03:21
 */

#include <bits/stdc++.h>
using namespace std;

char s[40];           // 输入单词,长度不超过 32
const char *suffixes[] = {"er", "ly", "ing"}; // 题面给定的后缀集合

int main() {
    scanf("%s", s);
    int n = strlen(s); // 当前单词长度
    // 依次检查三个后缀,命中则删除并输出
    for (int i = 0; i < 3; i++) {
        int len = strlen(suffixes[i]);
        if (n >= len && strcmp(s + n - len, suffixes[i]) == 0) {
            s[n - len] = '\0';
            break;
        }
    }
    printf("%s\n", s);
    return 0;
}