再帰を使用したソリューションを次に示します (式に空白を使用できません)。
#include <cstdio>
int eval(const char *s, const char **outptr)
{
int a, b, y;
const char *out;
switch (*s) {
case '+':
a = eval(s + 1, &out);
b = eval(out, &out);
y = a + b;
*outptr = out;
break;
case '-':
a = eval(s + 1, &out);
b = eval(out, &out);
y = a - b;
*outptr = out;
break;
case '*':
a = eval(s + 1, &out);
b = eval(out, &out);
y = a * b;
*outptr = out;
break;
case '/':
a = eval(s + 1, &out);
b = eval(out, &out);
y = a / b;
*outptr = out;
break;
default: /* '0'...'9'assumed */
y = *s - '0';
*outptr = s + 1;
break;
}
return y;
}
int main(int argc, char *argv[])
{
const char *end;
int x;
x = eval(argv[1], &end);
printf("%d\n", x);
return 0;
}
例:
./eval +3+*45/62
26