替换string []位置

时间:2014-02-03 10:32:58

标签: c# arrays

下一个例子:

用户输入样本:“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] getElement的string[]位置并将其替换为“添加”值?

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

5 个答案:

答案 0 :(得分:2)

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

请确保您测试getElement[i - 1]getElement[i + 1]不会首先生成IndexOutOfRangeException ...

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

答案 1 :(得分:1)

试试这样:

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

答案 2 :(得分:0)

你可以用

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

执行操作,因为它们被解析似乎很容易,但是会在任何非常复杂的测试用例中反击。即每当操作数出现在操作顺序之外时。 e.g。

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