2013-11-06 3 views
-2

Я видел подобные вопросы на этом форуме, но я все еще немного запутался .... как я могу включить строку, которая выглядит следующим образом:Преобразование строки в операции C++

  MyString = "5+4-3*2"; 

в простую математическую операцию которые могут быть сохранены в int? (поиск наиболее эффективного решения).

Ps. Я могу использовать только следующие библиотеки:

<cstdio>,<vector>,<cstring>,<string>,<cmath> 

Может кто-нибудь, пожалуйста, помогите мне?

+0

хороший пример можно найти в Керниган и Ритчи, просто адаптируются к C++, где необходимо – Bathsheba

+0

@Bathsheba, это ** C++ ** книги я никогда не слышал о :) – StoryTeller

+0

Нет, это C, но понятия очень важны – Bathsheba

ответ

2

Для этого нет функции, встроенной в C++, например, функции типа eval на других языках. Вам нужно будет все тяжело поднять.

Это будет включать в себя:

  1. Синтаксический строку, разбивая ее на отдельные лексемы. Некоторые токены здесь будут: 5, +, 4 и т. Д.
  2. Inrterpreting проанализированных токенов как операторов и операндов. Операторы будут +, - и т. Д., А операнды 5, 4 и т. Д.
  3. Как-то выполняется блок кода для каждого операнда и накапливает результаты. Вероятно, это будет включать в себя большой блок switch или if-else с одним условием для каждого поддерживаемого вами оператора. Возможно, вы также попытаетесь каким-то образом увлечься шаблонами или наследованием, но я бы предпочел сохранить его простым.
3

Это поможет вам:

Algorithms for Parsing Arithmetic Expressions

Он находится в C, но вы можете преобразовать его в C++ в качестве дополнительного упражнения :)

Вы также можете посмотреть на this question «s ответы - кажется, охватывает то, что вы просите.

+0

да ... эта статья может помочь ... но есть только одна проблема ...: #include «Stack.h» .... я не могу использовать другие библиотеки, а те, которые упомянуты – SpiderLinked

+2

@SpiderLinked: у вас есть 'vector' и может использовать это как стек – slashmais

+0

true ... я не понял, что :) – SpiderLinked

Смежные вопросы