2012-02-07 2 views
1

У меня есть много символических выражений с символом силы, который я хочу скопировать в программе на C++. Однако они имеют символ мощности ^, который не используется в C. Любой совет для внесения изменений быстро? Должен ли я использовать регулярные выражения, я могу сделать gcc, чтобы увидеть ^ как pow()?Преобразуйте много символического выражения из x^2 или x^3 в pow (x, n)

+0

Какой инструмент вы планируете использовать для операции поиска/замены? –

+0

Это может помочь. Напиши небольшой синтаксический анализатор, а затем возьмите сгенерированное дерево и выведите условный код c/C++. http://www.dreamincode.net/forums/topic/37428-converting-and-evaluating-infix-postfix-and-prefix-expressions-in-c/ – Beached

ответ

3

Чтобы быть уверенным, что ничего не скроет, вам понадобится парсер, который знает, когда ^ фактически используется как символ мощности (а не, например, в комментарии, строка).

Но вы можете уйти с простым регулярным выражением:

Заменить (\w+)\s*\^\s*(\w+) с pow(\1,\2).

Это должно охватывать большинство случаев и быть достаточно безопасным.

Конечно, это не удастся, если есть больше параметров, например, в (a + b)^(c + d) и т. Д. Это регулярное выражение соответствует только a^b или 2^3. Он также не соответствует x^0.5, поэтому, если это может произойти, вам понадобится ([\w.]+)\s*\^\s*([\w.]+)

+0

В Matlab все мои переменные, соответствующие определенному соглашению с namin Я использовал что-то подобное в vim% s/\ (\ w \ d \ w \)^\ (\ d \)/pow (\ 1, \ 2) Спасибо в любом случае за помощь – user1194167