Mahdi Ghiasi - 1 year ago 72
C++ Question

Evaluating arithmetic expressions from string in C++

I'm searching for a simple way to evaluate a simple math expression from an string, like this:

3*2+4*1+(4+9)*6

I just want
`+`
and
`*`
operations plus
`(`
and
`)`
signs. And
`*`
has more priority than
`+`
.

I think you're looking for a simple recursive descent parser.

Here's a very simple example:

``````const char * expressionToParse = "3*2+4*1+(4+9)*6";

char peek()
{
return *expressionToParse;
}

char get()
{
return *expressionToParse++;
}

int expression();

int number()
{
int result = get() - '0';
while (peek() >= '0' && peek() <= '9')
{
result = 10*result + get() - '0';
}
return result;
}

int factor()
{
if (peek() >= '0' && peek() <= '9')
return number();
else if (peek() == '(')
{
get(); // '('
int result = expression();
get(); // ')'
return result;
}
else if (peek() == '-')
{
get();
return -factor();
}
return 0; // error
}

int term()
{
int result = factor();
while (peek() == '*' || peek() == '/')
if (get() == '*')
result *= factor();
else
result /= factor();
return result;
}

int expression()
{
int result = term();
while (peek() == '+' || peek() == '-')
if (get() == '+')
result += term();
else
result -= term();
return result;
}

int _tmain(int argc, _TCHAR* argv[])
{

int result = expression();

return 0;
}
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download