我编写了这个将字符串转换为整数的函数。但是似乎有一个我无法弄清楚的错误。当我编译时,我的输出是 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;
}
最佳答案
您很可能在调用 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);
}
关于c++ - 为什么这个字符串到整数的转换函数要减1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30690030/