我编写了这个将字符串转换为整数的函数。但似乎有一个我无法弄清楚的错误。当我编译我的输出是645。
int s2i(string s){
int index_limit = s.length() -1;
return s2i(s, index_limit, 0,0);
}
int s2i(string s, int index_limit, int sum, int index){
if(index == s.length()) return sum;
int value = static_cast<int>( s[index] - '0');
sum += value * pow(10,index_limit);
return s2i(s, --index_limit, sum, ++index);
}
int main(){
string s = "646";
int val = s2i(s);
cout << val;
return 0;
}
答案 0 :(得分:3)
在调用pow
时,您很可能会失去一些准确性。而不是pow
,使用整数乘数。
int s2i(string s, int index, int sum, int mult){
if(index < 0) return sum;
int value = static_cast<int>( s[index] - '0');
sum += value * mult;
return s2i(s, --index, sum, mult*10);
}
int s2i(string s){
int index_limit = s.length() -1;
return s2i(s, index_limit, 0, 1);
}