Мой вариант.
int calc( char* s, int* len )
{
if( *s == '(' )
{
// We're in the beginning of a complex expression
int left_len, right_len, left_val, right_val;
left_val = calc( s+1, &left_len );
char op = s[ left_len + 1 ];
right_val = calc( s+left_len+2,&right_len );
*len = (left_len+right_len+1+1+1);
if( op == '+' )
return left_val + right_val;
else if( op == '-' )
return left_val - right_val;
}
else
{
// We're on a simple, one-digit number
*len = 1;
return *s - 48;
}
}
//Пример main
int main()
{
int len;
printf( "%d", calc( "((2+3)-(1+(4+(7-(4+1)))))", &len ) );
printf( "%d", len );
return 0;
}
А вот изменения в WinMerge.
P.S. Извините, если у кого рисунок съел много траффика. Увы, на РСДН нету раскрывающихся блоков для сообщений.