Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何读取布尔运算字符串并赋予其优先级?_C++_String - Fatal编程技术网

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. 

请发布您的尝试?欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个。