2011-04-06 46 views
1

在這個問題中,用戶輸入兩個數字。每個數字代表一個整數,其字符存儲在一個列表中。我需要修改+運算符,以便程序將採用兩個列表字符,將它們更改爲整數,添加它們,然後將其更改回char列表。令人困惑的是我知道,但希望代碼能夠幫助你清除問題:添加兩個字符列表

class LongInt 
{ 
public: 
    friend LongInt operator+(const LongInt& x, const LongInt& y); //This function will add the value of the two integers which are represented by x and y's character list (val). 

private: 
    list<char> val; //the list of characters that represent the integer the user inputted 

} 

這是LongInt類的頭文件。還有其他部分,如構造函數,析構函數等,但在這種情況下,這些是唯一重要的事情。我不知道如何去編寫實現文件中operator +定義的代碼。有任何想法嗎?

+1

如果是這樣的功課,那麼你應該將其標記爲此類。 – Jollymorphic 2011-04-06 03:15:00

回答

1

如果你想字符的列表轉換爲一個int,你可以做這樣的事情:

std::list<char> digits; 
int value = 0; 
for(std::list<char>::iterator it = digits.begin(); 
    it != digits.end(); 
    ++it) 
{ 
    value = value * 10 + *it - '0'; 
} 
+0

「* 10」是什麼意思? – Ctak 2011-04-06 18:23:13

+0

我假設數字是在小數基礎上,所以這個數值是sum(digit(i)* 10^i)。 – 2011-04-06 19:42:29

+0

我對反向迭代器的錯誤表示歉意。它應該是一個正常的迭代器。從最重要的數字開始,迭代到最低有效數字。然後將當前值乘以10並添加當前數字。 – 2011-04-06 20:49:21

3

你會啓動該功能是這樣的:

LongInt operator+(const LongInt& x, const LongInt& y) { 
    // code goes here 
} 

這個函數的定義會去外面類定義(大概在.cpp實現文件)。

在這個函數裏面,你可以使用普通的手工添加(增加對應的數字對,處理任何進位等)來添加參數xy。在當地的LongInt對象中生成結果,並返回operator+()函數中的計算值。

如果尚未決定你,你將需要決定至少顯著數字是否屬於第一最後val列表。無論哪種方式都是有效的,但一個選擇可能比另一個更容易處理(我會讓你決定哪一個)。

+0

有沒有辦法將字符列表轉換爲字符數組?這樣我可以使用Atoi()將字符數組轉換爲一個一致的int? – Ctak 2011-04-06 05:23:07

+0

看到我的答案在下面,因爲你不能在代碼中鍵入代碼 – 2011-04-06 06:13:49

+0

@Ctak:我只是猜測在這裏,但名字'LongInt'給出了一個線索,這個類可能是打算用於數字是*太大*以適應普通的C++'int'。因此,調用'atoi()'是不可能的。 – 2011-04-06 19:23:47