Добавление двух списков символов - PullRequest
1 голос
/ 06 апреля 2011

В этой задаче пользователь вводит два числа. Каждое число представляет собой целое число, символы которого хранятся в списке. Мне нужно изменить оператор +, чтобы программа взяла два списка символов, изменила их на целые, добавила их, а затем вернула обратно в список символов. Это сбивает с толку, я знаю, но, надеюсь, код поможет прояснить ситуацию:

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. Есть и другие части, такие как конструктор, деструктор и т. Д., Но это единственные вещи, которые имеют значение в этом случае. Я не знаю, как написать код оператора + определение в файле реализации. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Вы бы запустили функцию примерно так:

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

Это определение функции вышло бы за пределы определения класса (предположительно в .cpp файле реализации).

Внутри этой функции вы бы добавили параметры x и y, используя обычное добавление от руки (добавьте пары соответствующих цифр, обработайте любой перенос и т. Д.). Создайте результат в локальном LongInt объекте и верните вычисленное значение из вашей operator+() функции.

Если это еще не было решено для вас, вам необходимо решить, будет ли младшая значащая цифра первая или последняя в вашем списке val. Любой из этих способов действителен, но с одним вариантом, вероятно, будет проще работать, чем с другим (я позволю вам решить, какой из них).

1 голос
/ 06 апреля 2011

Если вы хотите преобразовать список символов в 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';
}
...