我在夏天分配了一些作业,由于这个问题,我完成了98%的项目陷入瘫痪。

我有一个类叫做混合课。它包含一个整数,一个分子和一个分母的成员数据。我需要重载所有常见的运算符,以允许混合,加法,比较和流混合类型的对象。除了>>(提取运算符),我所有运算符都已重载。

读入的所有混合数字将采用以下格式:
整个分子/分母

例如:1 2 / 3、0 7/8,-3 18 / 5、0 -1/89

header :friend istream& operator>> (istream &, Mixed);
CPP文件:istream& operator>> (istream &in, Mixed m) {...}
对于该任务,我仅限于iostream和iomanip库。我的计划是从流中读取值,并将它们分配给临时的int变量(w,n,d),然后将其与Mixed构造函数一起使用以创建对象m。不幸的是,我想不出一种将分子和分母分开的方法。它们都是整数,但是它们之间有一个char(/)。

  • 我不能将getline()与它的分隔符一起使用,因为它会将数据分配给char数组,我不相信我可以在没有其他库的情况下将其转换为int。
  • 由于相同的原因,我无法使用char数组然后对其进行分段。
  • 我不能在get()和peek()中使用while循环,因为同样,我不认为可以将char数组转换为int。
  • 我不能使用字符串或C字符串然后对其进行分段,因为这需要外部库。

  • 再一次,我需要仅使用iostream和iomanip将“22/34”之类的值分为22和34。有什么我可以忽略的明显方法吗?有没有一种方法可以使用指针进行隐式转换?

    最佳答案

    您可以先提取命名符,然后提取分隔符,然后提取分母。

    举例说明:

    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;
    }
    

    关于c++ - 混合数字类istream问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12042995/

    10-12 13:13