#include <stdio.h>
#include <ctype.h>
char const *
calculate( char const * input,
int * value )
{
char ch = *input;
*value = ch - '0';
return input + 1;
}
int left, right;
input = calculate( input+1, &left );
input = calculate( input, &right );
switch( ch ) {
case '+':
*value = left + right;
break;
case '-':
*value = left - right;
break;
case '*':
*value = left * right;
break;
case '/':
*value = left / right;
break;
default:
// should not reach here
break;
}
return input;
}
int main() {
char const * input = "+1+*23*45";
int result;
calculate( input, &result );
printf( "result is : %d\n", result
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgogCmNoYXIgY29uc3QgKgpjYWxjdWxhdGUoIGNoYXIgY29uc3QgKiBpbnB1dCwgCiAgICAgICAgICAgICAgIGludCAqIHZhbHVlICkKewogICAgICAgIGNoYXIgY2ggPSAqaW5wdXQ7CiAKICAgICAgICBpZiggaXNkaWdpdChjaCkgKSB7CiAgICAgICAgICAgICAgICAqdmFsdWUgPSBjaCAtICcwJzsKICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCArIDE7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBsZWZ0LCByaWdodDsKICAgICAgICBpbnB1dCA9IGNhbGN1bGF0ZSggaW5wdXQrMSwgJmxlZnQgKTsKICAgICAgICBpbnB1dCA9IGNhbGN1bGF0ZSggaW5wdXQsICZyaWdodCApOwogCiAgICAgICAgc3dpdGNoKCBjaCApIHsKICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgICAgICp2YWx1ZSA9IGxlZnQgKyByaWdodDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICAgICAgKnZhbHVlID0gbGVmdCAtIHJpZ2h0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAgICAqdmFsdWUgPSBsZWZ0ICogcmlnaHQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICp2YWx1ZSA9IGxlZnQgLyByaWdodDsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAvLyBzaG91bGQgbm90IHJlYWNoIGhlcmUKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KIAogICAgICAgIHJldHVybiBpbnB1dDsKfQogCiAKaW50IG1haW4oKSB7CiAKICAgICAgICBjaGFyIGNvbnN0ICogaW5wdXQgPSAiKzErKjIzKjQ1IjsKICAgICAgICBpbnQgcmVzdWx0OwogICAgICAgIAogICAgICAgIGNhbGN1bGF0ZSggaW5wdXQsICZyZXN1bHQgKTsKIAogICAgICAgIHByaW50ZiggInJlc3VsdCBpcyA6ICVkXG4iLCByZXN1bHQgKTsKICAgICAgICAKICAgICAgICByZXR1cm4gMDsKfQ==