我有一个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)
如果您知道所有字符foo都是数字,则可以使用从字符中(int) (foo[i] - '0')减去ascii值'0'.这适用于所有数字,因为它们的ascii值是连续的.
您的第一次尝试失败,因为foo[i]是单个char,而atoi()需要一个cstring.您的第二次尝试失败,因为它&foo[i]是对该角色的引用.