Оператор Bigint & gt; & gt; перегрузка

Вот мой код для моего оператора >> перегрузки. Предполагается взять цифры до точки с запятой и поместить их в большое значение.

std::istream& operator>>(std::istream& is, bigint& bi) {

int i = 0;
char ch;
char temp[SIZE];

// grabs the first character in the file
is >> ch;
temp[i] = ch;
++i;

// while loop grabs the rest of the characters
// up to the semicolon
while(ch != ';') {
is >> ch;
temp[i] = ch;
++i;
}

// temp is stored in the bigint ref
bi = bigint(temp);

return is;
}

У меня проблема в том, что когда я запускаю его, это дает мне дополнительный вывод. Например: когда я набираю «34;» в качестве входных данных результирующий bigint будет «3411». Может кто-нибудь сказать мне, что я делаю не так?

0

Решение

Вы не заканчиваете свою строку нулем temp, Добавь это:

temp[i - 1] = '\0';
bi = bigint(temp);

Обратите внимание -1 удалит точку с запятой, которая вам, вероятно, не нужна. Если вы хотите сохранить точку с запятой по какой-либо причине, измените ее на temp[i],

Вы также должны добавить проверку в цикл while, чтобы не переполнять размер буфера.

0

Другие решения

Вы гарантируете точку с запятой в temp в конце. Точка с запятой, вероятно, испортит любой анализ bigint делает с этой строкой. Измените цикл, чтобы проверить точку с запятой, прежде чем вставлять его в temp:

std::istream& operator>>(std::istream& is, bigint& bi)
{
char temp[SIZE] = {}; // zero out the array so the end is null terminated
char c;

for(int i = 0; i < SIZE-1 && is >> c && c != ';'; ++i)
{
temp[i] = c;
}

bi = bigint(temp);
return is;
}
0