Reputation: 317
I have written this function that converts a string to an integer. But there seems to be an error which i cant figure out. When i compile my output is 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;
}
Upvotes: 1
Views: 91
Reputation: 206557
You are most likely losing some accuracy in the call to pow
. Instead of pow
, use an integer multiplier.
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);
}
Upvotes: 3