std :: string部分为整数

Max*_*rai 5 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
}
Run Code Online (Sandbox Code Playgroud)

怎么做?

Ben*_*ery 10

这是我看到的最简单的方法:

std::string foo = "01001";
for (int i=0; i < foo.size(); ++i)
{
   int res = foo[i] - '0';
}
Run Code Online (Sandbox Code Playgroud)


mar*_*cog 6

如果您知道所有字符foo都是数字,则可以使用从字符中(int) (foo[i] - '0')减去ascii值'0'.这适用于所有数字,因为它们的ascii值是连续的.

您的第一次尝试失败,因为foo[i]是单个char,而atoi()需要一个cstring.您的第二次尝试失败,因为它&foo[i]是对该角色的引用.