混合数字类istream问题
Mixed number class istream issues
整个夏天我给自己布置了一些家庭作业,由于这个问题,我完成了98%的项目陷入了停滞。
我有一个班叫混合班。它包含整数、分子和分母的成员数据。我需要重载所有常见的运算符,以允许Mixed类型的对象的乘法、加法、比较和流。除了>>(提取运算符)之外,我已经重载了所有运算符。
读入的所有混合数字的格式为:全分子/分母
例如: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。不幸的是,我想不出分离分子和分母的方法。它们都是int,但它们之间有一个char(/)。
- 我不能将getline()与其分隔符一起使用,因为它将数据分配给一个char数组,我认为如果没有其他库,我无法将其转换为int
- 出于同样的原因,我不能使用char数组然后对其进行分段
- 我不能将while循环与get()和peek()一起使用,因为我认为我无法将char数组转换为int
- 我不能使用字符串或c字符串然后对其进行分段,因为这需要外部库
再次,我需要将像"22/34"这样的值拆分为22和34,只使用iostream和iomanip。有没有什么明显的方法我忽略了?有没有一种方法可以使用指针进行隐式转换?
您可以首先提取主格,然后提取分隔符,然后提取分母。
示例:
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;
}
再次,我需要将类似"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;
}
然后,您可以确保在两个整数之间读取的字符是'/'
,如果不是,则进行适当处理。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 关于 istream 中的错误处理的问题
- 将 istream 转换为 ifstream 时将 std::cin 传递到参数时出现问题
- 包装 std::istream 时出现问题,移动后unique_ptr不为空
- 从C++调用 Delphi DLL IStream 参数的问题
- 混合数字类istream问题
- 使用 istream >> 反序列化时出现问题
- istream末尾的字符问题
- 用istream读取boost basic_stream时出现问题