And*_*owl 10
这样做有一个循环而没有分区(使用C++ 11的基于范围的for,但可以很容易地重写而不用):
std::string s = "123";
int base = 10; // Must be <= 10, or the technique below won't work
int n = 0; for (char c : s) { n = n * base + (c - '0'); }
std::cout << n; // Should output 123
Run Code Online (Sandbox Code Playgroud)
编辑:
一个更安全,稍微复杂的解决方案,它将解析字符串,直到满足非数字字符:
#include <iostream>
int convert(std::string const& s, int base)
{
int n = 0;
for (char c : s)
{
if (!isdigit(c)) { break; }
n = n * base + (c - '0');
}
return n;
}
int main()
{
std::string s = "123d";
cout << convert(s, 10) << endl; // Should output 123
}
Run Code Online (Sandbox Code Playgroud)