最常用且安全的方式是 std::isdigit(static_cast(c)),但需注意其依赖 C locale 且不支持 Unicode;手写判断 c >= '0' && c

用 std::isdigit 判断单个字符是否为数字(最常用)
std::isdigit 是 C++ 标准库中最直接、最安全的方式,但它有重要前提:参数必须是 unsigned char 或 EOF,否则传入负值(如某些带符号 char 的 ASCII 扩展字符)会触发未定义行为。
- 确保传入前做类型转换:
std::isdigit(static_cast<unsigned char>(c))</unsigned> - 该函数依赖当前 C locale,但默认 "C" locale 下只识别
'0'–'9' - 不识别 Unicode 数字(如全角 '0' 或中文数字),也不识别带符号数字或小数点
char c = '5';
if (std::isdigit(static_cast<unsigned char>(c))) {
// true
}</unsigned>
手写判断:比较 ASCII 范围(简单可控)
如果只处理 ASCII 字符且追求零依赖、无 locale 干扰,直接比大小最清晰:
- 只需一行:
c >= '0' && c - 编译器通常能优化为单条指令,性能略优于
std::isdigit - 注意:不能用于
char可能为负的平台(如某些嵌入式环境),此时应先转unsigned char
std::stoi
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











