You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何从字符串"510"提取整数5时得到53?求解决方法

问题分析与解决方法

哈哈,这个问题我刚学C++的时候也踩过一模一样的坑!

首先你看到的53,其实是字符'5'的ASCII码值——在C++里,char类型本质上存储的是ASCII编码的整数,'0'的ASCII是48,'5'就是48+5=53,所以直接把x[0](类型是char)赋值给int变量,得到的自然是它的ASCII数值,而不是你想要的整数5。

至于你说用stoi()也得到53,大概率是用错了方式——比如直接传x[0]给stoi()?因为stoi()的参数是std::string类型,如果你硬传char,编译器会把它转成对应的ASCII码值作为整数传入,结果当然还是53。

下面给你两种靠谱的解决方法:

方法一:利用ASCII码连续性做减法

ASCII表中'0'到'9'是连续排列的,任意数字字符减去'0'就能得到对应的整数值,这是最简洁的方式:

string x = "510";
int number = x[0] - '0'; // 等价于 53 - 48 = 5
cout << number; // 输出5

方法二:正确使用stoi()

如果你想用stoi(),需要把单个字符转换成std::string再传入,比如用string(1, x[0])构造一个仅包含第一个字符的字符串:

string x = "510";
int number = stoi(string(1, x[0]));
cout << number; // 输出5

要是你本来想提取字符串开头的连续数字(比如字符串是"5abc123"也能提取5),直接传整个字符串给stoi()会得到连续数字的整数值,但你的例子里"510"会返回510,所以如果只需要第一个数字,还是用上面的单字符转字符串的方式更准确。


内容的提问来源于stack exchange,提问作者user9074706

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:47:35