我有一个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
}
怎么做?
答案 0 :(得分:10)
这是我看到的最简单方法:
std::string foo = "01001";
for (int i=0; i < foo.size(); ++i)
{
int res = foo[i] - '0';
}
答案 1 :(得分:6)
如果您知道foo
的所有字符都是数字,则可以使用(int) (foo[i] - '0')
从字符中减去'0'
的ascii值。这适用于所有数字,因为它们的ascii值是连续的。
您的第一次尝试失败,因为foo[i]
是一个char
,而atoi()
需要一个cstring。您的第二次尝试失败,因为&foo[i]
是对该角色的引用。
答案 2 :(得分:3)
只需使用减法即可获得每个数字:
int res = foo[i] - '0';
atoi
采用以null结尾的字符串,而不是单个字符。减法方法有效,因为十个十进制数字保证在字符集中是连续的(显然,如果你有可能在字符串中有非数字字符,你将需要进行适当的错误处理)。
答案 3 :(得分:0)
一种简单的方法,非常接近你所拥有的,将char插入预定义的字符串,如下:
std::string foo = "01001";
char str[] = {" "};
for (int i=0; i < foo.size(); ++i)
{
str[0] = foo[i];
int res = atoi( str );
}