讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

updream

一键生成高质量推广成片

C++如何判断一个字符串是否为数字_C++字符串检测常用逻辑【练习】

浅宇君_3955

浅宇君_3955

发布时间:2026-02-08 09:39:11

|

554人浏览过

|

来源于php中文网

原创

最直接方式是用std::isdigit逐字符判断,但需处理locale影响、负char UB及空字符串;更推荐C++17的std::from_chars,它零开销、无异常、精准控制解析边界。

c++如何判断一个字符串是否为数字_c++字符串检测常用逻辑【练习】

用 std::isdigit 遍历判断是否全为数字字符

最直接的方式是逐个检查每个字符是否属于 ASCII 数字('0'–'9'),但要注意:仅靠 std::isdigit 不足以判定“是数字”,它只检测字符是否为数字字符,且在 C++ 中受 locale 影响——默认 "C" locale 下安全,但若全局 locale 被修改过(比如调用过 std::setlocale),std::isdigit 可能对非 ASCII 字符返回 true,导致误判。

实操建议:

deepstream-dev
deepstream-dev

使用 Python pyservicemaker API 进行 NVIDIA DeepStream SDK 开发。在构建视频分析流水线、基于 GStreamer

下载

立即学习“C++免费学习笔记(深入)”;

  • 始终显式传入 static_cast<unsigned char>(c)</unsigned> 给 std::isdigit,避免 char 为负时 UB(未定义行为)
  • 空字符串应视为非数字,需提前检查 s.empty()
  • 只适用于无符号整数形式的字符串,不处理 "-123"、"+45"、"12.34" 或科学计数法
bool is_all_digits(const std::string& s) {
    if (s.empty()) return false;
    for (char c : s) {
        if (!std::isdigit(static_cast<unsigned char>(c))) 
            return false;
    }
    return true;
}

用 std::from_chars 判断并提取整数(C++17 起推荐)

std::from_chars 是目前最可靠、零开销的字符串转整数方案,它不抛异常、不依赖 locale、不分配内存,且能精确告诉你解析停在哪个位置。关键点在于:它能区分“全成功”、“部分成功”和“完全失败”。

实操建议:

立即学习“C++免费学习笔记(深入)”;

  • 解析后必须检查 ec == std::errc{}(无错误)且 ptr == s.end(),否则不是完整数字字符串
  • 支持 int、long、long long 等,注意目标类型溢出时 ec 会设为 std::errc::result_out_of_range
  • 自动跳过前导空白?不支持——std::from_chars 不跳空格,开头有空格直接失败,这点和 std::stoi 不同
bool is_valid_integer(const std::string& s) {
    if (s.empty()) return false;
    long long val;
    auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), val);
    return (ec == std::errc{} && ptr == s.data() + s.size());
}

为什么不用 std::stoi 或 std::stringstream 做判断?

它们看似方便,但用于“判断是否为数字”场景时隐患明显:

  • std::stoi 对 "123abc" 返回 123 且不报错(只更新 idx),容易误判为合法数字
  • std::stoi 遇到纯空格或非法前缀(如 " 123")会抛 std::invalid_argument,但无法区分“完全无效”和“前导空格”
  • std::stringstream 默认宽松:读取到第一个非数字就停,ss >> n 成功不代表整个字符串被消费,必须额外检查 ss.peek() == EOF
  • 所有基于流或异常的方案都有额外开销,且 locale 敏感(比如逗号作为千分位时可能干扰)

带符号/浮点数的简单扩展逻辑

如果需要支持负号、小数点,不能简单加几个 if,而要按结构分段验证:

  • 先检查可选符号:s[0] 是否为 '-' 或 '+',若是则从索引 1 开始检查剩余部分
  • 对剩余子串,允许至多一个 '.',且小数点前后至少一边要有数字(即 "123."、".45" 合法,"." 不合法)
  • 更稳妥的做法仍是走 std::from_chars 的浮点重载(std::from_chars(..., double&)),同样检查 ptr == end
  • 注意:"inf"、"nan" 在某些 locale 下可能被接受,若业务不允许,需额外过滤

边界情况比想象中多:前导零("00" 是合法整数,但 "012" 在某些上下文中可能被质疑)、空字符串、仅符号("-")、超长数字(溢出)、Unicode 数字字符(std::isdigit 不识别)——真正健壮的判断,往往取决于你实际接受哪些输入。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1938

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3184

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6384

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

6569

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

8094

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

12554

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

6519

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

7327

2025.08.07

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Postman Native Git工作流指南
Postman Native Git工作流指南

共0课时 | 0人学习

vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn