Как правильно перевернуть эту строку в c#? - PullRequest
0 голосов
/ 14 февраля 2020

Проблема: У меня есть много строк / уравнений в этом формате или аналогичных: -4x ^ 2 + 6x ^ 5 -12y + 3xy

НО они мне нужны в следующем порядке (наоборот - нисходящий вместо возрастающей силы): 3xy - 12y + 6x ^ 5 - 4x ^ 2

Текущая попытка (приближается):

string str ="-4x^2 + 6x^5 -12y + 3xy";

var reverseString = string.Join(" ", str.Split(' ').Reverse());
//This returns: 3xy + 12y - 6x^5 + -4x^2
//Desired rtrn: 3xy - 12y + 6x^5 - 4x^2

Проблемы с текущей попыткой:

  • "+" и "-" неправильно переупорядочены.
  • В случае отрицательных чисел "+ -" должен просто быть "-". (например, 2x + -3x должно быть 2x - 3x).
  • В тех случаях, когда уравнение начинается с отрицательного числа или находится внутри открывающей скобки, оно все равно должно оставаться как «-2x» или «(- 2x ...) (без пробела) например не ставьте "- 2x" с пробелом.

Вопрос:

  • Как бы я получить строку и +/- в правильном порядке и исправить проблемы с моей текущей попыткой?
  • Должен ли я повторить попытку после изучения регулярных выражений? (Если это более подходит).

Спасибо за любую помощь.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Вопрос вряд ли понятен, но я думаю, что я правильно понял, что вам нужно просто обратить части уравнения, или они также должны быть отсортированы по степени?

string str = "4x^2 + 6x^5 -12y + 3xy";

string strCopy = str;

if (str.Length != 0 && str[0] != '-') // covers case when first member is positive, if it is not enough you can use str.TrimStart()[0]
{
    strCopy = "+" + str;
}

var reverseString = string.Join(" ", strCopy
    .Replace(" ", "") // remove all spaces because they kind of random now
    .Replace("+", " +") // add space to signs to keep them with their value
    .Replace("-", " -")
    .Split(' ')
    .Reverse()
)
.TrimStart('+') // remove plus if positive number on the right
.Replace(" +", " + ") // fix spaces back
.Replace(" -", " - ");

Console.WriteLine(strCopy);
Console.WriteLine(reverseString);
Console.ReadKey();

Результат

enter image description here

0 голосов
/ 14 февраля 2020

Вам нужно будет использовать массив символов, а затем разбить строку сначала, чтобы добиться этого. После того, как это будет сделано, вы можете использовать строку, чтобы получить строку вывода.

string valueStr = "-4x^2 + 6x^5 -12y + 3xy";
string result = string.Join(" ", valueStr.Split(new char[] { ' ' }).Reverse());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...