1 条题解

  • 0
    @ 2025-8-24 21:16:20

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ShiRoZeTsu
    AFOed

    搬运于2025-08-24 21:16:19,当前版本为作者最后更新于2024-05-20 17:48:41,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Source & Knowledge

    2024 年 5 月语言月赛,由洛谷网校入门计划/基础计划提供。

    题目大意

    给定一个字符串,请你去除所有非英文字母的字符,输出结果。

    题目分析

    首先,你需要知道什么是 ASCII 码。简单来说,就是所常见的一些英文字符,标点符号等都有一个对应的 int 值。

    对于英文字母来说,所有大写字母的值按照字母顺序单调递增,所有小写字母的值按照字母顺序单调递增

    回到题目。如何判断一个字符 cc 是否是英文字母?如果是英文字母,那么 cc 既可以是大写也可以是小写,满足下面任意一条即可。

    • 如果是大写字母,那么 cc 一定满足 'A' <= c && c <= 'Z'
    • 如果是小写字母,那么 cc 一定满足 'a' <= c && c <= 'z'

    这里是用 ASCII 码的值进行比较大小。

    因此可以得出解法。首先,读入这个字符串:

    string s;
    cin >> s;
    

    然后直接循环遍历每一个位置上的字符。对于位置 ii 上的字符 sis_i,直接用上面两条去判断是否是英文字母。如果是英文字母,则直接输出即可;否则直接忽略:

    for(int i = 0; i < s.size(); i++) {
        if((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z'))
            cout << s[i];
    }
    

    视频讲解

    • 1

    信息

    ID
    9938
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    0
    已通过
    0
    上传者