【问题标题】:How to split a string efficiently and calculate with its values?如何有效地拆分字符串并使用其值进行计算?
【发布时间】:2017-03-02 17:51:19
【问题描述】:

我最近开始学习C#并尝试在控制台中编写一个类似于计算器的程序。我已经用两个整数完成了它并且它有效。现在我正在尝试编写允许更多用户输入进行计算的代码。

问题是,我一直坚持从用户输入中拆分字符串。例如,假设他写道: 1 + 2 * 3 - 5 我想在空间发生的地方拆分它。当用户在其间使用不止一个空格 时,它仍应拆分。就像1,2,,3,,,,5,6,,,4 一样:当使用多个逗号时,如何用逗号分隔?我只想要整数(以及示例 1 中的运算符)。

我已经尝试过使用[string_name].Split(' ')[string_name].Split(','),但它似乎只忽略了我感兴趣的用户输入值之间的 ONE char 变量。这使我无法将值放入数组中并且将它们转换为 int。

关于我的第一个示例的最后一个问题 (1 + 2 * 3 - 5): 除了接受多个空格/逗号之外,你怎样才能有效地分割这个字符串输入,保留 int 输入和运算符?我的想法是保存每个不均匀的输入值(1、2、3、5)和每个每个数组中的偶数输入值(+、*、-、/)。我考虑将运算符放入具有 4 种情况的 switch 中,并将带有数字的 string_array 转换为整数。之后,我会将它们放在与使用for 的用户输入完全相同的顺序中。

问题是:假设我正确实现它,我认为计算会从左到右解决,而不考虑'*'和'/'的优先级。

有人知道如何使用“高级”计算器有效地解决这个问题吗?我想了很长时间并尽我所能,但它似乎不起作用.. . 让我有点难过。我真的很想以某种方式解决这个问题。

【问题讨论】:

  • 使用StringSplitOptions,您可以指定忽略空条目。先看看Split 文档。
  • 看看this也许能帮到你。

标签: c# string split console


【解决方案1】:

你的第一个问题的答案是,你可以将一个重载传递给Split,它将忽略空条目:

str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

因此,更传统的做法是,您希望完全解析字符串,以便处理括号和没有空格的情况:例如4*(1+2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多