C# 实现带括号的逻辑表达式的自动判定(与或非)

开发上位机程序,有时需要用户对已知条件的逻辑进行编辑,然后程序判断逻辑的真假。比如你已经知道了AA,BB,CC,DD,EE,FF六个条件的真假,但是这六个条件之间的逻辑需要用户自行填写,那么如何在用户填写之后自动判断这个表达式最终结果呢。

我们先从一个比较简单的表达式入手,比如现在只有AA,BB,CC三个条件,AA&&BB||CC对应Bool值为{ true, false, true },这时只需要将表达式中的逻辑运算符提取出来,然后通过for循环对Bool值数组进行运算即可。但是如果表达式较为复杂,例如 ” ((AA && !BB)|| CC) && DD ||(EE && FF)”,取值为{ true, false, false, true, false, true },这种就需要先对括号进行处理了。思路如下:
1.将表达式中的条件名称替换成Bool值
((AA && !BB)|| CC) && DD ||(EE && FF) → ((true && !false) || false) && true || ( false && true )
2.找到最后一个左括号和其右侧距离他最近的右括号,这两个括号中间一定不存在其他括号。
如上面例子就是其中的(EE&&FF)位置对应的( false && true )
3.将括号中间的表达式进行运算,将其和括号替换成结果
( false && true ) → false
((true && !false) || false) && true || false
4.继续按照这个方法简化下去,直到得到最终结果
以下是实现的代码

class Program
    {
        static void Main(string[] args)
        {
            bool[] arrLogicValue = new bool[6] { true, false, false, true, false, true };


            //假设所有bool值都用一个字母表示,也可以使用多个字母,但是需要统一字母的数量
            string logicExpression = " ((AA && !BB)|| CC) && DD ||(EE && FF)";


            //去除空格,括号
            string logicExpressionTemp = logicExpression.Replace(" ", "");
            logicExpressionTemp = logicExpressionTemp.Replace("(", 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值