Как интерпретировать математические символы строки в действие
Каким образом возможно выполнить действие с математическими операторами в строке после нажатия кнопки? К примеру пользователь вводит в переменную string типа следующий текст: "1 плюс 2" или "1 + 2". На выводе должно получиться "3" в обоих случаях после нажатия кнопки. Каким образом можно реализовать подобное? Я пытался написать функцию для каждого математического действия, а потом сделать поиск символа через цикл с последующим вызовом функции в теле if блока для каждого результата поиска, но у меня так и не вышло ничего, потому от этой идеи отказался. Как можно реализовать подобную задумку?
Ответы (1 шт):
Автор решения: return
→ Ссылка
bool TryCompute(ReadOnlySpan<char> input, out int sum)
{
sum = 0;
var addend = 0;
var state = ParserState.Digit;
if (input.IsWhitespace()) return false;
for (var i = 0; i < input.Length; i++)
if (char.IsWhitespace(input[i]))
continue;
else if (input[i] >= '0' && input[i] <= '9')
{
if (state != ParserState.Digit) return false;
var start = i;
for (; i < input.Length && input[i] >= '0' && input[i] <= '9'; i++);
var formattedAddend = input[start..i];
if (!int.TryParse(formattedAddend, out addend)) return false;
state = ParserState.Operator;
i--;
}
else if (input[i] == '+')
{
if (state != ParserState.Operator) return false;
sum += addend;
state = ParserState.Digit;
}
else
return false;
if (state == ParserState.Digit) return false;
sum += addend;
return true;
}
enum ParserState
{
Digit,
Operator
}