Search code examples
c++regexmatlabsymbolic-mathcmath

Transform a lot of symbolic expression from x^2 or x^3 to pow(x,n)


I have a lot of symbolic expressions with the power symbol which I want to copy in a C++ program. However they have the power symbol ^ which is not used in C. Any advice for making the change fast? Should I use regular expressions of i can make gcc to see ^ as pow()?


Solution

  • To be certain not to foul anything up, you'd need a parser that knows when a ^ is actually being used as a power symbol (and not for example in a comment, a string).

    But you might get away with a simple regex:

    Replace (\w+)\s*\^\s*(\w+) with pow(\1,\2).

    That should cover most cases and be reasonably safe.

    Of course, it will fail if there are more parameters, like in (a + b) ^ (c + d) etc. This regex only matches things like a^b or 2^3. It also doesn't match x^0.5 correctly, so if those may occur, you'd need ([\w.]+)\s*\^\s*([\w.]+)