сменить оператора с минуса на плюс и наоборот в приложении калькулятора - PullRequest
0 голосов
/ 07 ноября 2018

это мой первый вопрос о калькуляторе, терпите меня. Я должен сделать кнопку, чтобы полностью изменить оператор плюс минус. Таким образом, 1 + 2-3 станет 1-2 + 3. Я управлял простой строкой, такой как 1 + 2, в 1-2 и наоборот с помощью btnChangeOperator. Однако, когда я попытался 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("+", "-");
}

Я также попытался сначала перейти к математической арифметике, такой как + - / - + = - и - = +, а затем снова изменить на +/-. Но это не сработает, так как + - изменится на +. Я использую Jace сложение для расчета, что действительно приятно. Я думал также о случае коммутатора, но мне не удается это реализовать. Может ли кто-то указать мне правильное направление, поскольку сложность заключается в том, что плюс может быть минусом, но в моем коде он снова изменится непосредственно на плюс. Спасибо.

редактирование: Я использовал ответ Джо Филлипса, который так прост и приятен: операторы if, а всего 1 строка кода (ну, 2, потому что у меня 2 txtFields).

txtInput1.Text = txtInput1.Text.Replace("+", "p").Replace("-", "+").Replace("p", "-");
txtInput2.Text = txtInput2.Text.Replace("+", "p").Replace("-", "+").Replace("p", "-");

Спасибо всем.

1 Ответ

0 голосов
/ 07 ноября 2018

Если вы просто изменяете минус на плюс и наоборот, используйте регулярное выражение и заменяйте его оценщиком

var text = "001-34+323";

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

Результат

001+34-323

Если нужно, вы можете заставить оценщика совпадать с другими сценариями, просто добавьте больше кода между фигурными скобками.

Делегат оценщика матча

...