微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++中对象的不同输入格式

如何解决C++中对象的不同输入格式

我最近学习了如何对类的对象使用 cin

istream& operator>>(istream& aliasCin,RationalNumber& r) {
    double temp;
    aliasCin >> temp;
    r = RationalNumber(temp);

    return aliasCin;
}

这是我的 RationalNumber 类,正如您所看到的,我正在接收一个 double 并将其传递给我的非认构造函数。我知道这是如何工作的,但是...

我的问题是,我还想要另一种样式来输入我的有理数,使其采用 a/b 格式。 其中 ab 是有理数的分子和分母。找到它们后,我可以

RationalNumber::RationalNumber (const int& a,const int& b){
    this->a = a;
    this->b = b;
    standardize(); // Changes the values of the object to standard form
    reduce(); // Changes the Rational Number to irreducible fraction
    count++;
}

首先想到了一个字符串作为输入,在字符串中找到/的索引,然后找到ab,但是我觉得应该有一个简单的方法比这个。或者这是我唯一的选择?

解决方法

是的。您可以通过链接 cin >> a >> b >> c 来读取多个值。

我不知道如何处理斜线,这似乎没问题:

#include <iostream>

using namespace std;

int main(){
        int a;
        char separator;
        int b;

        cout << "Enter a fraction (e.g. 3/4): ";
        cin >> a >> separator >> b;
        cout << endl;
        if(separator=='/'){
                //do whatever
                cout << "Beep boop... " << a << "/" << b << "=" << (float)a/b << endl;
        }
        else{
                cout << "wrong separator: " << separator << " a=" << a << ",b=" << b << endl;
        }
}

示例输出:

~$ g++ test.cpp && ./a.exe
Enter a fraction (e.g. 3/4): 3 / 4

Beep boop... 3/4=0.75
,

这取决于你想简化什么。

您可以将字符串作为构造函数的参数。让构造函数解析该字符串。

RationalNumber::RationalNumber (const std::string& s){
    // parsing stuff
}

这是可能的,但不是一个好的解决方案。因为你需要让构造函数来处理解析,这不应该是 RationalNumber 的职责。

例如:将来,RationalNumber 会允许 r = RationalNumber("1+2/3*4-5") 吗?

对于简单的数据结构来说太复杂了。

让我们加大力度。如果有另一个 ComplexNumber 类并且它接受表达式参数怎么办?然后在两个不同的地方有两个独立但相似的代码片段,这导致(似乎)难以维护代码。

离开表达式解析器做解析工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。