我的代码无法将字符串转换为整数

时间:2015-09-01 01:16:36

标签: c++ string function math int

我使用这个简单的函数将字符串转换为整数。我无法弄清楚这个函数如何返回数字(它应该返回)减去1。

例如,如果它的参数为"105",它将返回数字104.可能有另一种方法可以执行这项简单的任务,但我真的想知道我的代码在哪里失败再次犯这个错误。 这是C ++

int convertnumber(string cad)
{
    int e = 0;
    int number = 0;
    for (int i = cad.length() - 1; i >= 0; i--)
    {
        number += (cad[i] - '0') * (pow(10, e));
        e++;
    }
    return number;
}

3 个答案:

答案 0 :(得分:4)

我认为问题应该是" pow(10,e)",有时pow(10,2)的结果将返回99而不是100,你试着写自己的pow功能那么问题就会解决。 请阅读此内容Why does gcc compiler output pow(10,2) as 99 not 100?

#include <iostream>
using namespace std;

int pow10(int n){
  if (n == 0) {return 1;}
  int result = 1;
  for(int i = 0 ; i < n ; i++){
   result = result*10;
  }
 return result;
 }

int convertnumber(string cad)
{
   int e = 0;
   int number = 0;
   for (int i = cad.length() - 1; i >= 0; i--)
   {
     number += (cad[i] - '0') * pow10(e);
     e++;
  }
  return number;
  }

int main() {
cout<<convertnumber("105")<<endl;
return 0;
}

答案 1 :(得分:1)

如果你包含string库(#include <string>),那么

C ++ 11 已经为这个王者提供了很多工具。

一个很好的例子是着名的std::stoi(myString),你可以将它作为转换函数用于字符串到int 。但你也可以寻找 stol,stoll,stoul,stof,stof。

您可以找到有关此主题的更多信息here

现在,谈谈你的问题。

我测试了你的代码并且程序工作正常,也许你的错误是因为你需要清理缓冲区或类似的东西。

答案 2 :(得分:0)

问题是pow返回一个浮点数,而浮点算法的精度有限。

你可以写一个整数幂函数,但实际上你并不需要计算相同的十次幂;只需在每次迭代时将“位置因子”乘以10:

int convertnumber(string cad)
{
    int e = 1;
    int number = 0;
    for (int i = cad.length() - 1; i >= 0; i--)
    {
        number += (cad[i] - '0') * e;
        e *= 10;
    }
    return number;
}