以下是我的运营商代码>>超载。它应该将数字换成分号并将它们放入bigint中。
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 :(得分: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;
}
答案 1 :(得分:0)
您不是在终止字符串temp
。加上这个:
temp[i - 1] = '\0';
bi = bigint(temp);
注意-1
将删除您可能不需要的分号。如果您想以任何理由保留分号,请将其更改为temp[i]
。
您还应该在while循环中添加一个检查,以确保不会溢出缓冲区大小。