OneCoder Avatar
OneCodercoderli.com · 959 篇博文
考级精选题解

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【GESP/CSP】编程武器库-1, 字符类型判断

📅 2025-09-21·✍️ OneCoder·计算中...·⏱️ 12 分钟
#GESP#C++#武器库-字符

开篇语:

在之前做题的过程中,我发现有很多题目都会有一些共同的小的功能逻辑,比如判断一个字符是否为数字、字母、空格;字符串的大小写转换以及数字的进制转换等。

这部分的逻辑和代码其实是通用的、可复用的。掌握这部分技能,对每个等级的考生来说,就好像在逐步丰富你的“武器库”,“武器库”足够强大,可大大加快解题速度。

在之前做题的过程中,我就打算抽空逐步整理、总结这部分“技能”,今天终于抽出时间决定开始,本系列今天正式启动。

本人也是边学、边实验、边总结。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。

在之前做过的【GESP】C++三级练习luogu-B3640 T3 句子反转【GESP】C++三级练习 luogu-B2117 整理药名等题目中,都涉及到对单个字符进行是否是数字、字母或大小的判断的逻辑。这部分代码理论上是通用的,是你应该掌握的必备技能。今天我们就来详细了解一下这部分技能,开始丰富你的”武器库“。


一、判断字符是否是数字(0-9)

方法一,手动编码

手动编码永远是最直接的方法,但记不住内置函数的时候,可以选择手动编码。

C++ 4 行
// 判断字符是否为数字的函数
bool isNumber(char c) {
    return c >= '0' && c <= '9';
}

应用样例:

C++ 17 行
#include <iostream>
using namespace std;

// 判断字符是否为数字的函数
bool isNumber(char c) {
    return c >= '0' && c <= '9';
}

int main() {
    char c = '7';
    if (isNumber(c)) {
        cout << c << " 是数字" << endl;
    } else {
        cout << c << " 不是数字" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
7 是数字

方法二,使用内置 isdigit 函数

C++ 标准库提供了 <cctype> 头文件,其内定义了一系列常用的字符判断函数。其中就包括判断字符是否是数字的isdigit函数。

  • isdigit(c) → 如果 c 是 0~9 的数字字符,返回非 0(true)。
C++ 13 行
#include <iostream>
#include <cctype>
using namespace std;

int main() {
    char c = '7';
    if (isdigit(c)) {
        cout << c << " 是数字" << endl;
    } else {
        cout << c << " 不是数字" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
7 是数字

二、判断字符是否是字母(英文az或AZ)

方法一,手动编码

C++ 4 行
// 判断字符是否为字母的函数
bool isLetter(char c) {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}

应用样例:

C++ 17 行
#include <iostream>
using namespace std;

// 判断字符是否为字母的函数
bool isLetter(char c) {
    return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}

int main() {
    char c = 'A';
    if (isLetter(c)) {
        cout << c << " 是字母" << endl;
    } else {
        cout << c << " 不是字母" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
A 是字母

方法二,使用内置 isalpha 函数

C++ 标准库 <cctype> 头文件中定义了判断字符是否是字母的isalpha函数。

  • isalpha(c) → 如果 c 是 A~Z 或 a~z,返回 true。
C++ 13 行
#include <iostream>
#include <cctype>
using namespace std;

int main() {
    char c = 'A';
    if (isalpha(c)) {
        cout << c << " 是字母" << endl;
    } else {
        cout << c << " 不是字母" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
A 是字母

三、判断字符是否是大写字母(A~Z)

方法一,手动编码

C++ 4 行
// 判断字符是否为大写字母的函数
bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}

应用样例:

C++ 17 行
#include <iostream>
using namespace std;

// 判断字符是否为大写字母的函数
bool isUpperCase(char c) {
    return c >= 'A' && c <= 'Z';
}

int main() {
    char c = 'A';
    if (isUpperCase(c)) {
        cout << c << " 是大写字母" << endl;
    } else {
        cout << c << " 不是大写字母" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
A 是大写字母

方法二,使用内置 isupper 函数

C++ 标准库 <cctype> 头文件中定义了判断字符是否是大写字母的isupper函数。

  • isupper(c) → 如果 c 是 A~Z,返回 true。
C++ 13 行
#include <iostream>
#include <cctype>
using namespace std;

int main() {
    char c = 'A';
    if (isupper(c)) {
        cout << c << " 是大写字母" << endl;
    } else {
        cout << c << " 不是大写字母" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
A 是大写字母

四、判断字符是否是小写字母(a~z)

方法一,手动编码

C++ 4 行
// 判断字符是否为小写字母的函数
bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}

应用样例:

C++ 17 行
#include <iostream>
using namespace std;

// 判断字符是否为小写字母的函数
bool isLowerCase(char c) {
    return c >= 'a' && c <= 'z';
}

int main() {
    char c = 'a';
    if (isLowerCase(c)) {
        cout << c << " 是小写字母" << endl;
    } else {
        cout << c << " 不是小写字母" << endl;
    }
    return 0;
}

方法二,使用内置 islower 函数

C++ 标准库 <cctype> 头文件中定义了判断字符是否是小写字母的islower函数。

  • islower(c) → 如果 c 是 a~z,返回 true。
C++ 13 行
#include <iostream>
#include <cctype>
using namespace std;

int main() {
    char c = 'a';
    if (islower(c)) {
        cout << c << " 是小写字母" << endl;
    } else {
        cout << c << " 不是小写字母" << endl;
    }
    return 0;
}

输出:

PLAINTEXT 1 行
a 是小写字母

四、总结

  1. 推荐使用 <cctype> 的内置函数,因为它们更直观、可读性更好。

    • isdigit → 数字
    • isalpha → 字母
    • isupper / islower → 大小写
  2. 手动 ASCII 范围判断 更灵活,但代码可读性稍差。当你在考场忘记内置函数写法或者需要一些自定义规则的时候使用。

  3. <cctype> 中还有很多其他的判断函数,如 isspace(判断空格)、isalnum(判断字母或数字)等。本质就是针对ASCII表中特定范围的字符,分类判断,这里不做展开。当真正用道时,我们再考虑总结。

总之,本次我们武器库更新了字符判断是否是数字、字母、大写、小写。4个技能,后续我们将跟随问题,逐步更新。


附、当前武器库清单

分类 功能 教程
字符判断 判断是否为数字(0-9) 【GESP/CSP】编程武器库-1, 字符类型判断
字符判断 判断是否为字母(a-z/A-Z) 【GESP/CSP】编程武器库-1, 字符类型判断
字符判断 判断是否为大写字母(A-Z) 【GESP/CSP】编程武器库-1, 字符类型判断
字符判断 判断是否为小写字母(a-z) 【GESP/CSP】编程武器库-1, 字符类型判断

💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

GESP 编程与算法 · 考级精选题解⏱️ 17 分钟

【GESP/CSP】编程武器库-2, 十进制转换十六进制

在之前做过的【GESP】C++四级真题 luogu-B3851 [GESP202306 四级] 图像压缩题目中,需要将一个数字转换为十六进制表示并输出出来,如果你的"武器库"缺少这部分技能,你可能会一下不知所措,今天就专门总结下这个知识点,希望下次遇到可以"信手拈来"。 当前武器库清单 | 分类 | 功能 | 教程 |...

阅读全文 →
GESP 编程与算法 · 考级精选题解⏱️ 12 分钟

【GESP/CSP】编程武器库-3, 十六进制转换十进制

前文(【GESP/CSP】编程武器库-2, 十进制转换十六进制),我们介绍了从十进制到十六进制的处理手段,很显然这只做到了一半。在之前做过的【GESP】C++四级真题 luogu-B3869 [GESP202309 四级] 进制转换题目中,需要将不同进制的数字转换成十进制表示出来,其中十六进制由于涉及字母,相对特殊,其...

阅读全文 →
GESP 编程与算法 · 考级精选题解⏱️ 12 分钟

【GESP/CSP】编程武器库-4, 最大公约数和最小公倍数

在五级题目(【GESP】C++五级练习(初等数论考点) luogu-B3941 [GESP样题 五级] 小杨的锻炼)中,涉及到最大公约数和最小公倍数的计算,需要用到数论中的基本概念和算法。这部分既是五级考试大纲中明确要求的内容(【GESP】C++五级考试大纲知识点梳理, (1) 初等数论),又是编程考试中常见的、可复用...

阅读全文 →
OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

读者讨论与留言

0 条讨论
✨ 支持点击留言直接回复 · Markdown 引用格式
💬 还没有读者留言,快来成为第一个讨论者吧!