0
に()であれば( ':' '?'、)C++、私は三項演算子の場合は()関数を持っているスイッチとケースの文
if(operation == ':')
....
....
if(operation == '?')
....
return new ternaryOperator(first, second, third)
これらは完璧な演算値を与えます。しかし、私はそれらを作る必要があります Switch()とケースステートメント。 Switch()と入れ子になったSwitch()ステートメントも使用しましたが、正しい値が返されません。 これらのif関数をSwitchおよびCaseステートメントに入れるにはどうすればよいですか?
#include <iostream>
using namespace std;
#include "expression.h"
#include "subexpression.h"
#include "operand.h"
#include "plus.h"
#include "minus.h"
#include "times.h"
#include "divide.h"
#include "greaterThan.h"
#include "lessThan.h"
#include "equal.h"
#include "and.h"
#include "or.h"
#include "notEqual.h"
#include "ternaryOperator.h"
SubExpression::SubExpression(Expression* left, Expression* right){
this->left = left;
this->right = right;
}
SubExpression::SubExpression(Expression* first, Expression* second, Expression* third)
{
this->first = first;
this->second = second;
this->third = third;
}
SubExpression::SubExpression(Expression* left)
{
this->left = left;
}
Expression* SubExpression::parse()
{
Expression* left;
Expression* right;
Expression* first;
Expression* second;
Expression* third;
char operation, paren;
bool isTernary = false;
left = Operand::parse();
cin >> operation;
right = Operand::parse();
**if (operation == ':')
{
first = left;
second = right;
left = Operand::parse();
cin >> operation;
right = Operand::parse();
if (operation == '?')
{
third = right;
isTernary = true;
}
}
cin >> paren;
if (isTernary == true)
{
return new ternaryOperator(first, second, third);
}**
switch (operation)
{
case '+':
return new Plus(left, right);
case '-':
return new Minus(left, right);
case '*':
return new Times(left, right);
case '/':
return new Divide(left, right);
case '>':
return new greaterThan(left, right);
case '<':
return new lessThan(left, right);
case '=':
return new Equal(left, right);
case '&':
return new And(left, right);
case '|':
return new Or(left, right);
case '!':
return new notEqual(left);
}
return 0;
}
class ternaryOperator: public SubExpression
{
public:
ternaryOperator(Expression* first, Expression* second, Expression* third):
SubExpression(first, second, third)
{
}
double evaluate()
{
return third->evaluate() ? first->evaluate() : second->evaluate();
}
};
'スイッチ()'文字列リテラルを処理することはできませんに。 –
しかし、それは文字リテラルを扱うことができます(二重ではなく一重引用符に注意してください)。 @ JC315、あなたはそれらの '操作'値のswitch文であなたの試行を表示できますか? – Squirrel
case ':' first = left; second = right; スイッチ(操作){ ケース '?': 第3 =右; isTernary = true; } IF(真isTernary ==) \t {\t \tリターン新しいternaryOperator(第一、第二、第三); \t} – JC315