怎样将形如"false && ( true || false)"这样的字符串进行运算?

YangYun 2012-04-06 11:31:29
如题所示,我在运行中动态生成了如上述的字符串,现在该怎么办才能将这个字符串进行运算,最后得到true或false呢?
...全文
492 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2012-04-24
  • 打赏
  • 举报
回复
楼主结贴吧
crystal_lz 2012-04-20
  • 打赏
  • 举报
回复
- -!、、顿时 看见 就蛋疼了、、不得不说 我脑子中的第一反应是 对字符串出来、、还真没有想到动态编译那一块去、、- -!、、话说 动态编译 以前弄过一段时间 、、现在 感觉都忘完了 !、、
startstartsvip 2012-04-20
  • 打赏
  • 举报
回复



有人用 LINQ 作出来吗?

upc_xiaowei 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
是这样的,我本来就是对一个字符串进行了语法分析,字符串是形如这样的:A and B ( C OR D),然后我对这个A,B,C,D取出分别进行了运算,其结果是bool型,但现在面临的问题是我将A,b,c,d运算后,该怎样将若干个(个数是不定的)这样的结果进行最后的运算呢?
[/Quote]
什么是最后的运算?bool型的去运算?
xboxeer 2012-04-20
  • 打赏
  • 举报
回复
其实和利用栈来做字符串形式输入的四则运算是一样的,遇到“(”就入栈,遇到“)”就出栈,直到再碰到“(”,出栈的时候计算栈顶两个操作数的结果然后再压回栈顶,继续比较栈顶两个操作数
蔡袅 2012-04-20
  • 打赏
  • 举报
回复
DataTable dt = new DataTable();
object o = dt.Compute("false && ( true || false)".Replace("&&", "AND").Replace("||", "OR"), string.Empty);
Console.WriteLine(o);

---------输出结果------
False
请按任意键继续. . .

YangYun 2012-04-20
  • 打赏
  • 举报
回复
我现在认为还是象编译原理中的算术优先表达式那样做可能更好些吧。运算符有and、or,因子只能为false、true参与
  • 打赏
  • 举报
回复
动态编译不行吗?
YangYun 2012-04-20
  • 打赏
  • 举报
回复
厉害。这都想得出来。
YangYun 2012-04-06
  • 打赏
  • 举报
回复
不会是我又来实现一次编译原理中的类似计算器编程吧?
EnForGrass 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
如题所示,我在运行中动态生成了如上述的字符串,现在该怎么办才能将这个字符串进行运算,最后得到true或false呢?
[/Quote]
看来是学编译原理的孩子啊!
orochiheart 2012-04-06
  • 打赏
  • 举报
回复
还能动态生成代码啊?长见识了。。。
YangYun 2012-04-06
  • 打赏
  • 举报
回复
是这样的,我本来就是对一个字符串进行了语法分析,字符串是形如这样的:A and B ( C OR D),然后我对这个A,B,C,D取出分别进行了运算,其结果是bool型,但现在面临的问题是我将A,b,c,d运算后,该怎样将若干个(个数是不定的)这样的结果进行最后的运算呢?
cheng2005 2012-04-06
  • 打赏
  • 举报
回复
如果你保证生成的字符串是符合C#语法的,那可以选择动态生成代码。
请 baidu
C# 动态生成代码
mngzilin 2012-04-06
  • 打赏
  • 举报
回复
只能动态编译了
EnForGrass 2012-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

又或者有什么好办法达到这个相同的目的呢?
[/Quote]
你为什么不在动态生成时运算呢?运算完了把结果赋给一个bool变量啊,
现在字符串也只有分隔取出来来饿了,多麻烦
YangYun 2012-04-06
  • 打赏
  • 举报
回复
又或者有什么好办法达到这个相同的目的呢?
youzelin 2012-04-06
  • 打赏
  • 举报
回复
我做出来了!楼主给分吧!

var expression = " (true || false) || false && (( true || false) && (false || false))";
Console.WriteLine(expression);
expression = Regex.Replace(expression, @"\s+", "");
expression = Regex.Replace(expression, @"\s*(?i)false\s*", "0");
expression = Regex.Replace(expression, @"\s*(?i)true\s*", "1");

var regex1 = new Regex(@"\(?(?:1\|\|0|0\|\|1|1\|\|1|1&&1)\)?");
var regex2 = new Regex(@"\(?(?:0\|\|0|0&&0|1&&0|0&&1)\)?");
do
{
expression = regex1.Replace(expression, "1");
expression = regex2.Replace(expression, "0");
} while (expression != "1" && expression != "0");
Console.WriteLine(expression);
startstartsvip 2012-04-06
  • 打赏
  • 举报
回复
LINQ《= 干哪,这都都看错
startstartsvip 2012-04-06
  • 打赏
  • 举报
回复


1)动态编译


2)LING 有没有????????



加载更多回复(1)
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在编程中,逻辑表达式是程序执行布尔逻辑操作的核心工具。C#作为一种流行的面向对象编程语言,提供了强大的语法支持来处理逻辑运算。本文将详细探讨如何在C#中实现包含括号的逻辑表达式运算,涉及“与”(&&)、“或”(||)和“非”(!)等运算符。 与运算符(&&):只有当两个表达式都为真时,结果才为真。例如,true && true 结果为 true,而 true && false 结果为 false。 或运算符(||):只要有一个表达式为真,结果就为真。例如,true || false 结果为 true,而 false || false 结果为 false。 非运算符(!):用于反转布尔表达式的结果。如果表达式为真,!true 结果为 false;如果表达式为假,!false 结果为 true。 在逻辑表达式中,括号用于改变运算优先级。例如,(true && !false) 先计算括号内的 !false,结果为 true,再与 true 进行 && 运算。 实现带括号的逻辑表达式运算通常依赖递归。可以定义一个函数,接收字符串形式的表达式作为参数。该函数会逐字符检查表达式,遇到括号时递归处理子表达式,直到消除所有括号,再按运算符优先级执行逻辑运算。 预处理:移除多余空格,处理括号。通过扫描字符串,忽略空格,遇到括号时递归调用。 词法分析:将表达式拆分为运算符和操作数。例如,((true && !false) || false) && true || (false && true) 可以拆分为 "("、"true"、"&&"、"!"、"false"、")"、"||"、"false"、"&&"、"true"、"||"、"("、"false"、"&&"、"true"、")"。 语法分析:根据词法分

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧