gpt4 book ai didi

c++ - 覆盖 >> 像 int 这样的运算符

转载 作者:行者123 更新时间:2023-11-28 08:07:57 25 4
gpt4 key购买 nike

这是家庭作业的一部分。我不想要答案只是帮助。我必须创建一个名为 MyInt 的类,它可以存储任何大小的正整数。我只能使用 cstring cctype iomanip 和 iostream 库。我真的不知道从哪里开始。

6) 创建提取运算符的重载 >> 用于从输入流中读取整数。此运算符应忽略数字前的任何前导空格,然后读取连续的数字,直到遇到非数字(这与 >> 对于普通 int 的工作方式相同,因此我们希望以相同的方式工作)。此运算符应仅提取和存储对象中的数字。在数字之后遇到的“第一个非数字”可能是下一个输入的一部分,因此不应被提取。您可以假设输入中的第一个非空白字符将是一个数字。也就是说,当您要求输入数字时,您不必对输入的不适当类型(如字母)进行错误检查。

例子:假设执行下面的代码,输入的是“12345 7894H”。

MyInt x, y; 炭黑; cin >> x >> y >> ch;x 的值现在应该是 12345,y 的值应该是 7894,ch 的值应该是 'H'。

我的代码最后状态如下:

 istream& operator>>(istream& s, MyInt& N){
N.Resize(5);
N.currentSize=1;
char c;
int i = 0;
s >> c;
N.DigitArray[i++] = C2I(c);
N.currentSize++;
c = s.peek();
while(C2I(c) != -1){
s >> c;
if(N.currentSize >= N.maxSize)
N.Resize(N.maxSize + 5);
N.DigitArray[i] = C2I(c);
i++;
N.currentSize++;
}
}

它几乎可以工作!现在它抓取了正确的数字,但当我按下回车键时它并没有结束,我必须输入一个字母才能结束。

最佳答案

您可以创建一个 operator>>以这种方式重载你的类(作为一个自由函数,不在类内):

std::istream& operator>>(std::istream& lhs, MyInt& rhs) {
// read from lhs into rhs

// then return lhs to allow chaining
return lhs;
}

您可以使用成员peekreadistream读入字符,isspace测试字符是否为空格,isdigit检查字符是否为数字(isspaceisdigit<cctype> header 中)。

关于c++ - 覆盖 >> 像 int 这样的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com