2012-08-12 82 views
1

我試圖打開課件CS106b分配1.我被陷在問題4這就需要使用遞歸的寫入字符串轉換爲整數。我們不允許使用任何執行整數轉換的庫函數。C++和遞歸:函數整數到

的問題是,每一個「遞歸級別」後的代碼不保留以前的字符串的軌道,因此我不能追加和構建到字符串。

#include <iostream> 
#include <string> 
#include "console.h" 
#include "simpio.h" 
using namespace std; 

/* Function prototypes */ 

string intToString(int n); 
int stringToInt(string str); 

/* Main program */ 

int main() { 
    // [TODO: fill in the code] 
    int n = getInteger("Enter number for conversion to String: "); 
    cout<< "Converted to String: "<<intToString(n); 
    return 0; 
} 

//Functions 

string intToString(int n){ 
    double toBeDecomposed = n; 
    string convertedToString; 
    char ch; 
    string tempString; 

    if((double)(toBeDecomposed/10) >= 0.1){ 

     int lastDigit = (int)toBeDecomposed%10; 

     toBeDecomposed = (int)(toBeDecomposed/10); 

     intToString(toBeDecomposed); 

     if (lastDigit == 0) { 
      ch = '0'; 
     } 
     else if (lastDigit == 1) { 
      ch = '1'; 
     } 
     else if (lastDigit == 2) { 
      ch = '2'; 
     } 
     else if (lastDigit == 3) { 
      ch = '3'; 
     } 
     else if (lastDigit == 4) { 
      ch = '4'; 
     } 
     else if (lastDigit == 5) { 
      ch = '5'; 
     } 
     else if (lastDigit == 6) { 
      ch = '6'; 
     } 
     else if (lastDigit == 7) { 
      ch = '7'; 
     } 
     else if (lastDigit == 8) { 
      ch = '8'; 
     } 
     else if (lastDigit == 9) { 
      ch = '9'; 
     } 

     tempString = string() + ch; 

     convertedToString = convertedToString.append(tempString); 

     cout<<convertedToString<<endl; 

    } 
    cout<<"Returning: "<<convertedToString<<endl; 

    return convertedToString; 
} 

int stringToInt(string str){ 
    return 0; 
} 

我調試輸出顯示,它只返回最後一個數字:

enter image description here

任何人都可以建議如何成功地追加到字符串ConvertedToString讓我回到了整個轉換的整數?

+1

雖然你的問題已經得到解答,但我有一個改進建議。鬆散使用浮點(雙精度型)。這是不需要的,可能會導致舍入問題,效率較低,特別是在沒有浮點單元的平臺上。它也看起來像我的功能不會爲值<= 0工作。 – Eelke 2012-08-12 04:49:31

回答

3

你沒有做你的遞歸函數調用的結果什麼。

提示是intToString返回 a string。當您致電intToString(toBeDecomposed);時,您會忽略該返回值。

捕獲返回值,並用它做什麼。

+0

doh!非常感謝它現在的工作!我所要做的就是添加任務:convertedToString = intToString(toBeDecomposed); – rrazd 2012-08-12 04:22:15

+0

一般來說,你會說我的代碼編寫得好,還是可以在某處改進?我試圖提高我的代碼質量,我不確定我的代碼是否以「業餘愛好者」的身份出現。 – rrazd 2012-08-12 04:24:30

+1

@rrazd:它至少可以改進一點,至少IMO。我首先將個人數字轉換爲類似'char digit = input%10 +'0';'而不是long'if'/'then' /'else'。 – 2012-08-12 04:26:44

1

您convertedToString變量是本地varible,所以每次intToString函數調用它創建新的,並在遞歸結束並返回它得到它包含了最後一個數字的最後convertedToString。

簡單的解決方案是使其成爲靜態或全局。

+0

是的,也可以,謝謝! – rrazd 2012-08-12 04:26:40

+0

最受歡迎:--D – 2012-08-12 04:32:44