Ошибка конструктора строки класса BigNum - PullRequest
1 голос
/ 03 октября 2011

Итак, я реализую класс BigNum для работы с большими целыми числами и в настоящее время пытаюсь исправить свой класс строкового конструктора.Я должен иметь возможность читать строки, такие как "-345231563567" в массиве с номерами, читаемыми в обратном направлении (т.е. 765365132543).Первая часть прикрепленного кода проверяет первый символ, чтобы увидеть, является ли он положительным или отрицательным, и устанавливает положительное значение в true или false.Следующая часть кода проверяет наличие начальных нулей в числе, которое может произойти, а также, если само число равно нулю.последняя часть - это то, что загружает число в массив, и по какой-то причине я не могу заставить код работать.любая помощь с решением очень ценится.

    BigNum::BigNum(const char strin[])
{
size_t size = strlen(strin);
positive = true;
used=0;
if(strin[0] == '+')
{
    positive = true;
    used++;
}
else if(strin[0] == '-')
{
    positive = false;
    used++;
}
else
{
    positive = true;
}

// While loop that trims off the leading zeros
while (used < size)
{
    if (strin[used] != '0')
    {
    break;
    }

    used++;
}

// For the case of the number having all zeros
if(used == size)
{
    positive = true;
    digits = new size_t[1];
    capacity = 1;
    digits[0] = 0;
    used = 1;
}
// Reads in the digits of the number in reverse order
else
{
    int index = 0;
    digits = new size_t[DEFAULT_CAPACITY];
    capacity = size - used;


    while(used < size)
    {
    digits[index] = strin[size - 1] - '0';
    index++;
    size--;
    }
    used = index + 1;
}
}

BigNum.h можно найти здесь http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/hw2/revised/BigNum.h

, а тестовый файл, который я пытаюсь использовать, находится здесь.Я провалил тест 7 http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/hw2/revised/TestBigNum.cxx

Ответы [ 2 ]

0 голосов
/ 06 октября 2013

Я только что попытался запустить ваш код, и, похоже, проблема с цифрой = строка. Это указатель, который вы устанавливаете равным значению. Может ли это быть вашей проблемой?

0 голосов
/ 03 октября 2011

Похоже, что вы выделяете байты DEFAULT_CAPACITY, которые вы определили как 20, и продолжаете вставлять в них 22 цифры.

...