2017-03-17 108 views
0

我正在写一个程序,将后缀算术表达式转换为使用堆栈的中缀表达式。用户输入是一个字符串,它被分成一个数组(将空格视为分隔符)。然后,"+","-","*""/"的一个case语句区分运算符和操作数(即,如果它不是这些符号中的一个,则它是一个操作数;因此将类型转换为整数)。是否有可能在C++中创建一个int +枚举?

我想知道它是否可以创建类似的东西到enum,其中受理类型要么是整数或符号+-*/

+2

你可能想要一个代表任何你想要的'Token'类。然后可以为'OperatorToken'和'NumberToken'创建子类,以便将它们全部放在同一个堆栈中,或者使用像isOperator()这样简单的东西,其中整数的值将是'OPERATOR_PLUS','OPERATOR_MINUS'等 – Peter

回答

0

是否有可能创建类似的东西来枚举,其中允许的类型或者是整数

一种enum内部是一个C++基本类型的值。你不能在那里有整数和符号,除非你保留一些解释为这些符号的数字。

其他替代

肯定的是:联盟或结构可以解决这个问题。

+0

那么不可能创建一个允许整数和只有这四个符号的混合数据类型? –

+0

不,它们必须是'Integral类型',它不包含结构体或等价物。如果你有足够的32位整数,你可以使用一个64位整数,并使用额外的位来达到这个目的。 –

3

这是一个很好的使用案例std::variant - 或它的doppelgängerboost::variant

enum class Operator : char { 
    plus  = '+', 
    minus = '-', 
    multiply = '*', 
    divide = '/' 
}; 

// Now a token can contain either an integer or an operator. 
using Token = std::variant<int, Operator>; 
+0

可以做一点加强'enum class Operator:char' – em2er

+0

@ em2er为什么不能。谢谢! – Quentin

相关问题