Как интерпретировать математические символы строки в действие

Каким образом возможно выполнить действие с математическими операторами в строке после нажатия кнопки? К примеру пользователь вводит в переменную 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
}
→ Ссылка