c++ - 为什么这个字符串到整数的转换函数要减1?

标签 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;
}

最佳答案

您很可能在调用 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/

相关文章:

python - 如何从 C++ 运行 Python 程序

c++ - boost::spirit::xml::宽字符串编码

python - Cython:如何从 C 级类型获取 'actual Python type'(类型代码/dtype)

c# - Convert.ToString 返回 string.empty 而不是 null

c++ - 不明确的 string::operator= 调用隐式转换为 int 和 string 的类型

java - 替换为字符串

Android Studio - 如何让 R.string 在编辑器中显示文本

c++ - 强制两个线程直接访问内存中的全局变量?

c++ - 将引用作为参数传递给抽象类中的方法

regex - 搜索和替换字符串,并在替换中放置一个计数器