如何解决C++中对象的不同输入格式
我最近学习了如何对类的对象使用 cin
。
istream& operator>>(istream& aliasCin,RationalNumber& r) {
double temp;
aliasCin >> temp;
r = RationalNumber(temp);
return aliasCin;
}
这是我的 RationalNumber 类,正如您所看到的,我正在接收一个 double 并将其传递给我的非默认构造函数。我知道这是如何工作的,但是...
我的问题是,我还想要另一种样式来输入我的有理数,使其采用 a/b
格式。
其中 a
和 b
是有理数的分子和分母。找到它们后,我可以
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++;
}
首先想到了一个字符串作为输入,在字符串中找到/
的索引,然后找到a
和b
,但是我觉得应该有一个简单的方法比这个。或者这是我唯一的选择?
解决方法
是的。您可以通过链接 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 举报,一经查实,本站将立刻删除。