【问题标题】:Replace string[] positions替换字符串 [] 位置
【发布时间】:2014-02-03 10:32:58
【问题描述】:

下一个例子:

用户输入示例:“1 + 3 - 2 * 4”

string input = Console.ReadLine();
string[] getElement = input.split(' ');

//So I can have
//getElement[0] = 1
//getElement[1] = +
//getElement[2] = 3
//...

//I have a "for()" cicle here and at one moment I have the following instruction:

if(getElement[i] == "+")
    int add = Convert.ToInt32(getElement[i - 1]) + Convert.ToInt32(getElement[i + 1]);
    //In this example it means: add = 1 + 3

我的问题是如何删除位置 [0],[1],[2]string[] getElement 并将它们替换为“添加”值?

在这种情况下,我不知道如何使用Replace()。我需要调整数组大小吗?需要建议。

【问题讨论】:

  • 在这种情况下你应该使用堆栈
  • 也许使用List<string> 而不是string[]
  • 您能否说清楚,您是想用文本替换 OP 还是想评估结果。
  • 如果你想评估表达式,你可以参考:stackoverflow.com/questions/5838918/…
  • 我想替换一些计算的结果。因为我总是有 2 个数字和 1 个操作数,所以我想替换这 3 个位置作为计算结果。

标签: c# arrays


【解决方案1】:

您可以使用List<string> 代替数组。您可以像在数组中一样处理列表中的各个部分,并且可以删除项目。

只要确保您首先测试getElement[i - 1]getElement[i + 1] 不会产生IndexOutOfRangeException...

注意:对于非常简单的操作(例如您的示例中的操作),这是一种合理的方法,但对于更复杂的操作(例如对括号或函数的支持),您需要基于语法。您可以使用 Gold Parsing System 构建这样的解析器(参见 http://www.goldparser.org)。

【讨论】:

  • 我将使用 List 来查看我的选择,但我理解你的意思。关于 goldparser,我想我不需要它来解决这个问题,但经过一些快速阅读,它对于大型项目来说将是一个不错的选择。
【解决方案2】:

试试这样:

string input = Console.ReadLine();
string[] getElement = input.split(' ');

if(getElement[i] == "+")
{
    int add = Convert.ToInt32(getElement[i - 1]) + Convert.ToInt32(getElement[i + 1]);
    input = input.Replace(getElement[i - 1] + ' ' + getElement[i] + ' ' + getElement[i + 1]),add.ToString())
}

这将从输入表达式中删除所有1+3,并将其替换为存储在add 变量下的新值。

确保按照其他专家的建议处理indexOutOfRangeException

【讨论】:

  • 试过了,但“输入”保持不变:S
  • 立即尝试。输入之间有空格。
  • 显然!感谢您的帮助。这个答案解决了我的问题。
【解决方案3】:

不要使用数组,使用列表。您无法在数组中删除和添加元素,但可以在 List 中执行此操作。

List<String> myList = new List<String>();
myList.add("something");
myList.removeAt(0);

【讨论】:

    【解决方案4】:

    你可以这样做

    input.Replace(string.Concat(element[0],element[1],element[2]),"Result")
    

    【讨论】:

    • 我认为 OP 想用 1 个元素替换元素 0-2,这是添加的结果。
    【解决方案5】:

    要有效解决此问题,您需要使用Shunting-yard Algorithm 将您的表达式转换为Reverse Polish Notation 表示。这样,您将遵守 BODMAS 的操作顺序并最终得到正确的结果。

    执行这些操作,因为它们被解析似乎很容易,但会因任何合理复杂的测试用例而适得其反。即每当操作数出现在操作顺序之外时。例如

    3 - 2 + 4 * 2 / ( 2 ^ 2 + 3 )

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2012-06-18
      • 2021-01-27
      • 2017-09-17
      • 2017-04-10
      • 2015-10-18
      • 2019-06-21
      相关资源
      最近更新 更多