2011-04-06 37 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