我有一个 std::string: 01001
,我想要获取每个数字:
std::string foo = "01001";
for (int i=0; i < foo.size(); ++i)
{
int res = atoi( foo[i] ); // fail
int res = atoi( &foo[i] ); // ok, but res = 0 in any case
}
如何做到这一点?
这是我看到的最简单的方法:
std::string foo = "01001";
for (int i=0; i < foo.size(); ++i)
{
int res = foo[i] - '0';
}
foo
的字符都是数字,您可以使用(int) (foo[i] - '0')
,它从字符中减去'0'
的ascii值。这适用于所有数字,因为它们的ascii值是连续的。foo[i]
是一个单独的char
,而atoi()
需要一个C字符串。您的第二次尝试失败了,因为&foo[i]
是对该字符的引用。每个数字都可以通过简单的减法得到:
int res = foo[i] - '0';
atoi
函数接收以null结尾的字符串,而不是单个字符。减法计算方法之所以有效,是因为十个十进制数字在字符集中保证是连续的(显然,如果字符串中可能会有非数字字符,你需要进行适当的错误处理)。
std::string foo = "01001";
char str[] = {" "};
for (int i=0; i < foo.size(); ++i)
{
str[0] = foo[i];
int res = atoi( str );
}