std :: string部分为整数

时间:2011-01-18 19:41:08

标签: c++ string int

我有一个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
}

怎么做?

4 个答案:

答案 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 );
}