Вот мой код для моего оператора >> перегрузки. Предполагается взять цифры до точки с запятой и поместить их в большое значение.
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». Может кто-нибудь сказать мне, что я делаю не так?
Вы не заканчиваете свою строку нулем temp
, Добавь это:
temp[i - 1] = '\0';
bi = bigint(temp);
Обратите внимание -1
удалит точку с запятой, которая вам, вероятно, не нужна. Если вы хотите сохранить точку с запятой по какой-либо причине, измените ее на temp[i]
,
Вы также должны добавить проверку в цикл while, чтобы не переполнять размер буфера.
Вы гарантируете точку с запятой в 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;
}