我在夏天给自己做了一些功课,由于这个问题,我98%完成的项目已经停止了。
我有一个名为Mixed的课程。它包含整数,分子和分母的成员数据。我需要重载所有常用运算符,以允许混合类型的对象的乘法,加法,比较和流式传输。除了>>之外,我已经超载了所有运营商(提取算子)。
所有读入的混合数字都是格式: 整个分子/分母
ex:1 2 / 3,0 7/8,-3 18 / 5,0 -1/89
标题:friend istream& operator>> (istream &, Mixed);
CPP文件:istream& operator>> (istream &in, Mixed m) {...}
对于作业,我仅限于iostream和iomanip库。我的计划是读取流中的值并将它们分配给临时的int变量(w,n,d),然后我将使用Mixed构造函数创建对象m。不幸的是,我想不出分离分子和分母的方法。它们都是整数,但它们之间有一个char(/)。
再一次,我需要将像“22/34”这样的值分成22和34,只使用iostream和iomanip。我有一些相当明显的方法可以忽略吗?有没有办法使用指针隐式转换?
答案 0 :(得分:2)
你可以首先提取分母,然后是分离字符,然后是分母。
插图示例:
istream& operator>> (istream &in, Mixed &m) {
int num, denom;
char separ;
in >> num;
in.get(separ);
if (separ != '/')
in.setstate(ios::failbit);
in >> denom;
if (in) {
// All extraction worked
m.numerator = num;
m.denominator = denom;
}
return in;
}
答案 1 :(得分:0)
再次,我需要分割一个像" 22/34"进入22和34,使用 只有iostream和iomanip。
你是不是只读了第一个整数,用get
来获取下一个字符,然后读第二个整数?像这样:
#include <iostream>
int main() {
using std::cin;
using std::cout;
int num;
int den;
while(cin) {
cin >> num;
if (cin.get() != '/') {
// handle error
}
cin >> den;
cout << num << "/" << den << std::endl;
}
return 0;
}
然后,您可以确保在两个整数之间读取的字符为'/'
,如果不是,则可以正确处理。