C++中string如何转换为int?(多种方法示例)

推荐优先使用std::stoi,它简洁安全且支持异常处理;其次可选stringstream(需检查尾部字符)或strtol(控制力强但需手动处理错误);避免使用atoi和强制转换。

c++中string如何转换为int?(多种方法示例)

在C++中,将 std::string 转换为 int 有多种安全、常用的方法,推荐优先使用 C++11 引入的 std::stoi,兼顾简洁性与错误处理能力。

使用 std::stoi(最常用,推荐)

这是标准库提供的字符串转整数函数,自动跳过前导空白,支持十进制、八进制(以 0 开头)、十六进制(以 0x0X 开头),并能抛出异常处理非法输入。

基本用法:int n = std::stoi("123");捕获转换异常(如空字符串、非数字字符):

try {    int n = std::stoi("abc"); // 抛出 std::invalid_argument} catch (const std::invalid_argument& e) {    std::cerr << "不是有效整数n";}

获取转换结束位置(检查是否全部转换):
size_t pos; int n = std::stoi("42px", &pos); // pos=2,说明只读了"42"
pos != str.length(),表示字符串含多余字符(如单位、字母等)。

使用 std::stringstream(灵活,适合复杂解析)

适合需要多次读写、混合类型解析或兼容旧标准(C++98)的场景,但性能略低、代码稍长。

基础转换:

std::string s = "789";std::stringstream ss(s);int n;ss >> n;

检查是否成功且无残留:
if (ss >> n && ss.peek() == EOF) { /* 转换完整 */ }
其中 ss.peek() == EOF 确保没有未读字符(如 "123abc" 会被部分读取,需额外判断)。

使用 strtol(C 风格,控制力强)

底层高效,支持指定进制、返回尾部指针,适合对性能或进制有特殊要求的场合,但需手动处理错误和溢出。

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

基本用法(十进制):

const char* cstr = s.c_str();char* end;long val = std::strtol(cstr, &end, 10);if (*end != '' || val  INT_MAX) {    // 转换失败或溢出} else {    int n = static_cast(val);}

支持其他进制:第三个参数可设为 8(八进制)、16(十六进制)等。

不推荐的方法:atoi 和 C 风格强制转换

atoi("abc") 返回 0,无法区分合法输入 "0" 和非法输入;static_cast(s[0]) 是取 ASCII 值,不是数值转换——这些都不是真正的“字符串转整数”。

基本上就这些。日常开发首选 std::stoi,需要精细控制时用 strtol,老项目或混合解析可用 stringstream。注意始终检查异常或返回状态,避免静默错误。

以上就是C++中string如何转换为int?(多种方法示例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1489256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 12:15:20
下一篇 2025年12月19日 12:15:35

相关推荐

发表回复

登录后才能评论
关注微信