Questo esercizio non lo risolvi, se non in modo decisamente arzigogolato, con la sola manipolazione di stringhe: dovresti usare un parser ricorsivo discendente.
La sintassi delle tue estressioni e':
<expr> ::= <term> ('+' l | '-' <term>)*
<term> ::= <coeff>? '(' <polinomio> ')'
<polinomio> ::= <polyterm> ( '+' | '-' <polyterm>)*
<polyterm> ::= <const> | <powerx> | <const><powerx>
<powerx> ::= <var> | <var> '^' <exp>
<coeff> ::= <integer>
<const> ::= <integer>
<exp> ::= <integer>
<integer> ::= [0-9]+
con questo converti l'espressione in una serie di vettori, dove ogni vettore rappresenta I coefficienti di un polinomio. Quindi implementi le 4 operazioni tra vettori, e generi il risultato.
se non sai che cosa e' sta robba, dovrai ingegnarti non poco.