C# 在计算器应用程序中,将运算符从负改为正,反之亦然

C# 在计算器应用程序中,将运算符从负改为正,反之亦然,c#,.net,xaml,calculator,C#,.net,Xaml,Calculator,这是我关于计算器的第一个问题,请耐心听我说。我必须做一个按钮来反转加减运算符。所以1+2-3会变成1-2+3。 我使用BTNChange操作符将一个简单的字符串(如1+2)转换为1-2,反之亦然。然而,当我尝试1+2-3并想将其改为1-2+3时,我得到了1+2+3,然后是1-2-3。 我首先尝试使用正则表达式: Regex pattern = new Regex("[+-]"); if (txtInput1.Text.Contains("-")) { txtInput1.Text =

这是我关于计算器的第一个问题,请耐心听我说。我必须做一个按钮来反转加减运算符。所以1+2-3会变成1-2+3。 我使用BTNChange操作符将一个简单的字符串(如1+2)转换为1-2,反之亦然。然而,当我尝试1+2-3并想将其改为1-2+3时,我得到了1+2+3,然后是1-2-3。 我首先尝试使用正则表达式:

Regex pattern = new Regex("[+-]");
if (txtInput1.Text.Contains("-"))
{ 
    txtInput1.Text = pattern.Replace(txtInput1.Text, "--");//jace can manage that, I also tried "+" 
    txtInput2.Text = pattern.Replace(txtInput2.Text, "+");
}
else if (txtInput1.Text.Contains("+"))
{               
    txtInput1.Text = pattern.Replace(txtInput1.Text, "+-");//jace can manage that, I also tried with "-"
    txtInput2.Text = pattern.Replace(txtInput2.Text, "-");
}
这只适用于1+2或1-2和1+2+3或1-2-3,但不适用于1+2-3或1-2+3。我也尝试了替换,但问题是相同的:

if (txtInput1.Text.Contains("-"))
{
    txtInput1.Text = txtInput1.Text.Replace("-", "+");
    txtInput2.Text = txtInput2.Text.Replace("-", "+");
}
else if (txtInput1.Text.Contains("+"))
{
    txtInput1.Text = txtInput1.Text.Replace("+", "-");
    txtInput2.Text = txtInput2.Text.Replace("+", "-");
}
我还试着先把它改成数学算术,比如+-/-+=-和--=+,然后再把它改成+/-。但这不起作用,因为+-会变成+。我用它来计算,这真的很好。我也考虑过一个切换案例,但我没有设法实现它。 有人能给我指出正确的方向吗?因为困难在于加号可以是负号,但在我的代码中,它会再次直接变为加号。 多谢各位

编辑: 我使用了JoePhillips的答案,它非常简单和漂亮,没有if语句,只有一行代码(好的,因为我有两个txtFields)


Thx all.

如果您只是将减号更改为加号,而visa更改为加号,请使用带有匹配计算器的正则表达式替换

var text = "001-34+323";

Regex.Replace(text, "[-+]", me => { return me.Value == "-" ? "+" : "-";   })
结果

001+34-323

如果需要,可以让匹配评估器考虑更多的场景,只需在括号之间添加更多代码。


string result=string.Concat(source.Select(c=>c=='-'?'+':c=='+'?'-':c))如果这不是某种需要使用正则表达式的作业,请注意您可能走错了路。您正在尝试使用表达式,迟早您将需要进行词法分析和解析,而不仅仅是将内容保留为字符串。但这是一个广泛的话题。你不能把所有的+都改成-,然后把所有的-,因为显而易见的原因。遍历所有字符,在适当的情况下对其进行更改,并将结果连接起来,这就是您必须执行的操作。就像上面的评论一样。你可以“聪明”一点,先把+和-换成另一个符号,然后再做替换。类似这样:
Replace(“+”,“a”)。Replace(“-”,“+”)。Replace(“,“-”)
如果它是正则表达式,则必须将all+转换为非数字标记,如DumbassAssignment,然后将-s翻转为+,然后将该标记的所有实例替换为-s。嗯,像上面的评论。
001+34-323