blob: e24bd9140d8c812627ac5749598a1a852e5e3c1e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define MAXLEN 1000
int main(int argc, char *argv[]) {
char op[MAXLEN], *s;
int val[MAXLEN], i, j, k, op1, op2;
if (argc == 1) {
printf("Usage: expr 2 3 4 + *\n");
return 1;
}
for(i = 0, j = 0, ++argv; --argc > 0 && i < MAXLEN - 1 && j < MAXLEN - 1; argv++) {
s = *argv;
if (isdigit(*s))
val[i++] = atoi(s);
else if (s[0] == '+' || s[0] == '-' || s[0] == '*' || s[0] == '/' || s[0] == '%')
op[j++] = s[0];
else {
printf("error: %s not supported\n", s);
return -1;
}
}
k = j;
j = 0;
while (j < k && i > 1) {
op2 = val[--i];
op1 = val[--i];
switch (op[j++]) {
case '+':
val[i++] = op1 + op2;
break;
case '-':
val[i++] = op1 - op2;
break;
case '*':
val[i++] = op1 * op2;
break;
case '/':
val[i++] = op1 / op2;
break;
case '%':
val[i++] = op1 % op2;
break;
default:
printf("error: unknown op\n");
return 1;
}
}
printf("\t%d\n", val[--i]);
return 0;
}
|