【问题标题】:How do I parse a string and get formula? in C# [duplicate]如何解析字符串并获取公式?在 C# [重复]
【发布时间】:2011-06-10 18:30:13
【问题描述】:

可能重复:
Evaluate C# string with math operators

假设我有一个值为“1*2+4”的基本字符串

我将如何解析信息然后进行计算?

我正在自学 c#,但我的假设是这是编程中的一个常见问题,但如果不使用库,如何做到这一点?

到目前为止,我的结果已经让我将字符串拆分并将它们放入一个字符数组中,但这是我停止的地方,因为我试图弄清楚如何将字符与运算符以及字符与整数进行比较。

我不确定我是否走对了这条路,但如果有人能指出我正确的方向,那就太好了。

感谢您的帮助。

【问题讨论】:

  • 你关心操作顺序吗?
  • 没想到这一点,但更喜欢正常的运算符优先规则。
  • "不使用库" 为什么有限制?您假设这是一种常见操作,但您不想使用其他人已经提出的解决方案?
  • 假设您希望 4+2*3 为 10(即,乘法或除法先于加法或减法),那么请查看 stackoverflow.com/questions/4582398/… 或尝试在 SO 中搜索“方程解析器”。
  • 我非常喜欢这种方法,但没有时间检查它是否回答了问题。 social.msdn.microsoft.com/Forums/en-NZ/csharplanguage/thread/…

标签: c# string parsing math


【解决方案1】:

您正在寻找的是Shunting-yard 算法。 您至少需要两个堆栈;一个用于存储运算符,一个用于操作数。填满堆栈后,您可以创建RPN 并计算答案。

【讨论】:

  • +1 我最近不得不执行一项与此非常相似的学校作业(我使用了带有 & 和 | 等运算符的单词)。调车场算法也是我使用的。您将熟悉逆波兰表示法、堆栈和队列。这是一个体面的运动。
  • 非常感谢您的帮助
【解决方案2】:

如果你想了解现有的各种库是如何做到这一点的,你应该学习解析、词法和句法分析、表达式树、编译器理论等。此外,请查看多个开放式库中的任何一个的源代码。执行此操作的源库。

【讨论】:

    【解决方案3】:

    好吧,c#(或任何其他语言)可能会为您提供各种工具来帮助您,但无论使用哪种编程语言,解决问题的总体方法都将始终保持不变。

    所以是的,您确实分为运算符和整数。您确实会逐个识别字符,但请尝试以最有效的语言方式进行识别。 Fosco 的分析器指向正确的链接。使用Ncalc Library 而不是做体力劳动。

    但是,要完成你开始的工作:

    int.Parse(str) 
    
    int.TryParse(str, out num)   
    

    ...是您可以考虑在 C# 中将字符串转换为整数(通过使用 split() 函数获得的整数吗?)的函​​数。你可以在这里阅读它们...(Parse, TryParse)

    【讨论】:

    • 这有助于解析功能让生活变得更轻松......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2019-11-14
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多