我使用这个简单的函数将字符串转换为整数。我无法弄清楚这个函数如何返回数字(它应该返回)减去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;
}
答案 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;
}