@kevus

Как строку форматировать в функцию (C#)?

Здравствуйте.

Есть строка с содержимым:
14 - 15

Компилятор к ней относится как к тексту.
Дотянутся до "начала" я не могу.

На входе у меня string (обычный текст)
14 - 15

Вопрос. Как мне произвечти математический расчет?
Вычитание.

Что бы функция отдавала вместо
14 - 15

Это
1
(14-15=1)

Спасибо.
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 2
lam0x86
@lam0x86
Есть два пути:
  1. Сложный - самому написать калькулятор выражений. Если выражения несложные, то такой путь предпочтительный.
  2. Использовать пакет Microsoft.CodeAnalysis.CSharp.Scripting (для .NET Framework 4.6+ или .NET Core 1.1+):
  • Проинсталировать пакет:
    Install-Package Microsoft.CodeAnalysis.CSharp.Scripting

  • Вычислить выражение:
    int result = await CSharpScript.EvaluateAsync<int>("14 - 15");

Ответ написан
Комментировать
lexxpavlov
@lexxpavlov
Программист, преподаватель
lam0x86 сказал всё правильно, я распишу про сложный путь.
Нужно разделить строку на части, состоящие из чисел и операций.
В простом случае (когда два числа и одна операция) это можно сделать однократным поиском str.IndexOfAny(new []{'+', '-', '*', '/'}), который вернёт индекс символа операции.
В общем случае (когда несколько операций в строке) нужно искать циклом и добавлять найденные части в список, и потом обрабатывать его другим циклом. Более правильно, но более сложно - учитывать приоритеты операций (сначала умножение, потом сложение).
Если в строке возможны скобки, то лучше части заполнять не в список, а в специальный класс, который будет разбирать полученные части в дерево вычислений.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы