首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串算术运算

字符串算术运算
EN

Code Review用户
提问于 2014-07-24 14:59:44
回答 4查看 38.5K关注 0票数 1

我有一根类似str = " 4+ 6 * 30";的绳子。我必须使用C#对此执行算术操作;该问题的解决方案如下所示。

代码语言:javascript
运行
复制
     string temp = " 4 + 6 * 5";
     int firstNaum = 0;
     int secondNum = 0;
     int ThirdNum = 0;
     int finalResults = 0;
    //Spliting strings
    string[] withoutOperator = temp.Split('\t',' ','*' , '+');
    //Iterating strings 
    int counter = 0;
    foreach (var res in withoutOperator)
    {
        if (!string.IsNullOrEmpty(res) && counter ==1)
        {
            firstNaum = Convert.ToInt32(res);
        }
        if (!string.IsNullOrEmpty(res) && counter== 4)
        {
            secondNum = Convert.ToInt32(res);
        }
        if (!string.IsNullOrEmpty(res) && counter == 7)
        {
            ThirdNum = Convert.ToInt32(res);
        }
        counter += 1;
    }
    finalResults = firstNaum + secondNum * ThirdNum;
EN

回答 4

Code Review用户

发布于 2014-07-24 21:46:06

计算数学表达式的最简单和最简单的方法之一是使用DataTable类的计算方法:

代码语言:javascript
运行
复制
DataTable dt = new DataTable();
int answer = (int)dt.Compute("2+(4*3)*4", "");

答案是50。

请注意,您必须捕获异常以捕获无效表达式。

票数 16
EN

Code Review用户

发布于 2014-07-24 16:23:53

你的解决方案非常有限。因为它只接受以下格式的字符串( x1 x2 x3 ),并应用于函数x1+x2*x3

要构建表达式计算器,您需要完成以下步骤:

  1. 将表达式分段为标记列表。
  2. 将标记解析为可识别的词(数字、运算符、括号等)
  3. 根据操作顺序将列表转换为树结构
  4. 计算顶部根的结果,这需要从其分支(Es)中得到结果。
票数 10
EN

Code Review用户

发布于 2014-07-24 15:21:03

你能澄清你想让我们回溯什么吗。

我的想法是:

  1. 使用一个已经执行infix数学解析的库,因为这个过程相对比较复杂,但是以前已经“解决”了很多次。
  2. 您的代码在操作中采用非常严格的顺序。这并不意味着它具有很强的可扩展性。
  3. 尝试添加验证。不要使用Convert.ToInt32(res),而是使用int.TryParse(res, out n)。如果函数返回false,则您知道解析失败,您可以根据自己的意愿来处理它。
  4. 也许在每个循环上Trim()您的res --尽管您需要将它赋值给一个新变量(例如,var res2 = res.Trim();)
票数 6
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/57928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档