C++ 如何读取布尔运算字符串并赋予其优先级?
我必须读一行这样的文件C++ 如何读取布尔运算字符串并赋予其优先级?,c++,string,C++,String,我必须读一行这样的文件 assign x = (c OR (a AND B)) OR (NOT D) 其中assign是一个关键字,用于激活名为Logic_gate的类的方法,该类计算并存储布尔运算的结果 我通过getline从文件中读取这一行,并使用sstream对象istringstream读取该字符串,但我不知道如何为该操作赋予优先级。也就是说,我想先做支架之间的操作,然后再做另一个 在本例中,我希望: -A AND B -(c OR (a AND B)) -(NOT D) -(c OR
assign x = (c OR (a AND B)) OR (NOT D)
其中assign是一个关键字,用于激活名为Logic_gate的类的方法,该类计算并存储布尔运算的结果
我通过getline从文件中读取这一行,并使用sstream对象istringstream读取该字符串,但我不知道如何为该操作赋予优先级。也就是说,我想先做支架之间的操作,然后再做另一个
在本例中,我希望:
-A AND B
-(c OR (a AND B))
-(NOT D)
-(c OR (a AND B)) OR (NOT D)
-Store result in x
听起来好像您正在寻找一种将中缀表达式转换为后缀符号的方法?这使您可以构建一个非常容易评估的操作堆栈。有一个非常古老的表达式解析器,它可能不再编译了,但是中缀到后缀的转换可以看到解析函数: 如果您知道or/not/and/的运算符优先级,那么应该非常简单。您可能会注意到解析函数中I/Enter语句的顺序与C++的运算符优先级相匹配。p> 。。。。显然,我并不是建议您将其编译为x86机器代码!!这只是一些我知道有关联的代码: 一个非常简单的例子:
// infix
x = A AND B
// postfix
x = A B AND
// to evaluate
A is a variable, push onto stack
B is a variable, push onto stack
AND is a binary op, so compute:
stack[last - 1] = stack[last - 1] AND stack[last]
pop a value from the stack
// stack now contains 1 value, the result
原文是:
// infix
x = (c OR (a AND B)) OR (NOT D)
// postfix
x = A B AND C OR D NOT OR
// evaluated like so:
A is a var, push on stack
B is a var, push on stack
AND - perform op, pop value from stack, store result in stack.top()
C is a var, push on stack
OR - perform op, pop value from stack, store result in stack.top()
D is a var, push on stack
NOT is unary. store !stack.top() in stack.top(). DO NOT POP!
OR - perform op, pop value from stack, store result in stack.top()
// the stack should contain the result.
请发布您的尝试?欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个。