Interpreting a basic math string
My advice here is not to use C++ (directly) for this type of job. There are tools out there to help you parse formatted streams (you have to learn another tool though).

Personally I use flex and bison. BUT I recommend you look around and see if there are more modern version or alternatives.

Flex Rules

This converts a stream of characters into a stream of tokens.

%%
\+              return '+';
\-              return '-';
\*              return '*';
\/              return '/';
\(              return '(';
\)              return ')';
{Number}        return 259;
{WhiteSpace}    /* Ignore */
.               throw std::runtime_error("Invalid Character");
%%


Bison Rules

This converts a stream of tokens and build a parse stack that is processed.

%%
result  :   exp                     {value = $1;}
exp     :   add_exp
add_exp :   mul_exp
        |   add_exp '+' mul_exp     {$$ = $1 + $3;}
        |   add_exp '-' mul_exp     {$$ = $1 - $3;}
mul_exp :  pri_exp
        |   mul_exp '*' pri_exp     {$$ = $1 * $3;}
        |   mul_exp '/' pri_exp     {$$ = $1 / $3;}
pri_exp :   '(' exp ')'             {$$ = $2;}
        |   Number
Number  :   NUMBER                  {$$ = getCurrentNumber();}
%%


The actual files are slightly bigger as there are some boiler plate that you need get everything working together. But this boilerplate is very similar so once you have it no need to worry about it. The languages are very concise and understandable (but that is relative).

A lot of research has already been done on parsing so there is very little need to reinvent the wheel.