为什么这个字符串到整数转换函数关1?

时间:2015-06-07 04:22:56

标签: c++ string

我编写了这个将字符串转换为整数的函数。但似乎有一个我无法弄清楚的错误。当我编译我的输出是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;
}

1 个答案:

答案 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);
}