从字符串提取单个字符并转换为int类型的代码实现疑问
问题分析与解决方案
嘿,我来帮你排查这段代码的问题~
首先,你代码里的std::atoi(s[2])之所以失效,是因为**std::atoi的参数要求是const char*类型的字符串指针**,但你传的s[2]是单个char字符(这里是'5')。当你把char直接传给atoi时,它会把这个字符的ASCII值当作指针地址来处理,这显然不是你想要的——'5'的ASCII码是53,所以你最终得到的value会是53,而不是期望的5。
下面给你几种正确的转换方法:
方法1:利用ASCII码直接计算(最简单高效)
数字字符的ASCII码是连续的,'0'到'9'依次递增,所以用目标字符减去'0'就能直接得到对应的整数:
int value = 0; std::string s = "#/5"; value = s[2] - '0'; // 此时value == 5
方法2:将单个字符转为字符串后用atoi
把单个字符构造成一个临时字符串,再传给atoi:
int value = 0; std::string s = "#/5"; value = std::atoi(std::string(1, s[2]).c_str()); // 得到value == 5
方法3:使用C++11及以上的std::stoi
std::stoi可以直接处理std::string,用法更简洁:
int value = 0; std::string s = "#/5"; value = std::stoi(std::string(1, s[2])); // 得到value == 5
如果你的字符串格式固定(比如总是第三位是目标数字),方法1是最优选择,不需要额外的字符串构造操作,性能最好。
内容的提问来源于stack exchange,提问作者MTurek
相关产品推荐
相关产品推荐

