使用递归 C++ 将字符串转换为整数

String to integer using recursion C++

int toInteger(const string& str, int count,int&value){
   if(str.length() == 1) {
      value += (str[0] - '0')*pow(10,count);
      return value;
   }
   else{
      value +=(str[str.length()-1] - '0')*pow(10,count);
      cout << value << endl << str << endl;
      toInteger(str.substr(0,str.length()-1),count+1,value);
   }
   return value;
}

int main(){
   string str;
   cout << "Enter String : ";
   cin >> str;
   int count = 0;
   int value = 0;
   int toint = toInteger(str, count, value);
   cout << toint << endl;   
}

这个函数假设得到一个字符串输入 str,然后 return 使用递归的字符串的整数版本。

"Str" 是字符串
"count" 是幂乘数 :: 最初是 0
value”是 return 值 :: 最初是 0

但是这个程序在这个函数中的问题似乎出现在字符串至少长度为3之后。:

如果我的字符串输入是“12”,那么我得到 return 值 12。

如果我的字符串输入是“123”,那么我得到 return 值 122。(函数是如何减一的?

如果我的字符串输入是“1234”,那么我得到 return 值 1233。(再次减去一个)

看看你的代码是如何工作的(正如评论中的几个人所说),这实际上并不是你问题的答案,但我应该指出你的函数不必要地复杂并且失去了一半的意义通过在调用之间使用共享可变状态来实现递归。

可以这样更简洁优雅:

int toInteger(const string& str) {
    if(str.length() == 0)
         return 0;
    return str[str.length() - 1] - '0' +
        toInteger(str.substr(0, str.length() - 1)) * 10;
}

从浮点类型到整数类型的转换向零舍入。

如果您的浮点值非常接近 123...但不完全,您将失去所有该分数值的结果是 122.

这适用于此。

  value += (str[0] - '0')*pow(10,count);

尝试制作一个 非常初级的 整数版本的 pow 供您的函数使用。只是为了测试一下。

int pow( int x, int y )
{
  int result = 1;
  while ( y-- ) result *= x;
  return x;
}

int toInteger(const string& str, int count,int&value){
   if(str.length() == 1) {
      value += (str[0] - '0')*pow(10,count);
      return value;
   }
   else{
      value +=(str[str.length()-1] - '0')*pow(10,count);
      cout << value << endl << str << endl;
      toInteger(str.substr(0,str.length()-1),count+1,value);
   }
   return value;
}

此版本没有整型和浮点型之间的转换。结果,没有四舍五入