#include <stdio.h>
#include <stdlib.h>
#define MAX 80
void inToPostfix(char*, char*); // 中序轉後序
int priority(char); // 運算子優先
double eval(char*);
double cal(char, double, double);
int main(void) {
char infix[MAX] = {'\0'};
return 0;
}
void inToPostfix(char* infix, char* postfix) {
char stack[MAX] = {'\0'};
int i, j, top;
for(i = 0, j = 0, top = 0; infix[i] != '\0'; i++) switch(infix[i]) {
case '(': // 運算子堆疊
stack[++top] = infix[i];
break;
case '+': case '-': case '*': case '/':
while(priority(stack[top]) >= priority(infix[i])) {
postfix[j++] = stack[top--];
}
stack[++top] = infix[i]; // 存入堆疊
break;
case ')':
while(stack[top] != '(') { // 遇 ) 輸出至 (
postfix[j++] = stack[top--];
}
top--; // 不輸出 (
break;
default: // 運算元直接輸出
postfix[j++] = infix[i];
}
while(top > 0) {
postfix[j++] = stack[top--];
}
}
int priority(char op) {
switch(op) {
case '+': case '-': return 1;
case '*': case '/': return 2;
default: return 0;
}
}
double eval(char* infix) {
char postfix[MAX]= {'\0'};
char opnd[2] = {'\0'};
double stack[MAX] = {0.0};
inToPostfix(infix, postfix);
int top, i;
for(top = 0, i = 0; postfix[i] != '\0'; i++) switch(postfix[i]) {
case '+': case '-': case '*': case '/':
stack[top - 1] = cal(postfix[i], stack[top - 1], stack[top]);
top--;
break;
default:
opnd[0] = postfix[i];
stack
[++top
] = atof(opnd
); }
return stack[top];
}
double cal(char op, double p1, double p2) {
switch(op) {
case '+': return p1 + p2;
case '-': return p1 - p2;
case '*': return p1 * p2;
case '/': return p1 / p2;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+IAojaW5jbHVkZSA8c3RkbGliLmg+IAoKI2RlZmluZSBNQVggODAKCnZvaWQgaW5Ub1Bvc3RmaXgoY2hhciosIGNoYXIqKTsgLy8g5Lit5bqP6L2J5b6M5bqPIAppbnQgcHJpb3JpdHkoY2hhcik7IC8vIOmBi+eul+WtkOWEquWFiApkb3VibGUgZXZhbChjaGFyKik7IApkb3VibGUgY2FsKGNoYXIsIGRvdWJsZSwgZG91YmxlKTsgCgppbnQgbWFpbih2b2lkKSB7IAogICAgY2hhciBpbmZpeFtNQVhdID0geydcMCd9OyAKCiAgICBwcmludGYoIumBi+eul+W8j++8miIpOyAKICAgIHNjYW5mKCIlcyIsIGluZml4KTsgCiAgICBwcmludGYoIiVmIiwgZXZhbChpbmZpeCkpOwogICAgCiAgICByZXR1cm4gMDsgCn0gCgp2b2lkIGluVG9Qb3N0Zml4KGNoYXIqIGluZml4LCBjaGFyKiBwb3N0Zml4KSB7IAogICAgY2hhciBzdGFja1tNQVhdID0geydcMCd9OwogICAgaW50IGksIGosIHRvcDsKICAgIGZvcihpID0gMCwgaiA9IDAsIHRvcCA9IDA7IGluZml4W2ldICE9ICdcMCc7IGkrKykgc3dpdGNoKGluZml4W2ldKSB7IAogICAgICAgIGNhc2UgJygnOiAgICAgICAgICAgICAgLy8g6YGL566X5a2Q5aCG55aKIAogICAgICAgICAgICBzdGFja1srK3RvcF0gPSBpbmZpeFtpXTsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBjYXNlICcrJzogY2FzZSAnLSc6IGNhc2UgJyonOiBjYXNlICcvJzogCiAgICAgICAgICAgIHdoaWxlKHByaW9yaXR5KHN0YWNrW3RvcF0pID49IHByaW9yaXR5KGluZml4W2ldKSkgeyAKICAgICAgICAgICAgICAgIHBvc3RmaXhbaisrXSA9IHN0YWNrW3RvcC0tXTsKICAgICAgICAgICAgfSAKICAgICAgICAgICAgc3RhY2tbKyt0b3BdID0gaW5maXhbaV07IC8vIOWtmOWFpeWghueWiiAKICAgICAgICAgICAgYnJlYWs7IAogICAgICAgIGNhc2UgJyknOiAKICAgICAgICAgICAgd2hpbGUoc3RhY2tbdG9wXSAhPSAnKCcpIHsgLy8g6YGHICkg6Ly45Ye66IezICggCiAgICAgICAgICAgICAgICBwb3N0Zml4W2orK10gPSBzdGFja1t0b3AtLV07CiAgICAgICAgICAgIH0gCiAgICAgICAgICAgIHRvcC0tOyAgLy8g5LiN6Ly45Ye6ICggCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBkZWZhdWx0OiAgLy8g6YGL566X5YWD55u05o6l6Ly45Ye6IAogICAgICAgICAgICBwb3N0Zml4W2orK10gPSBpbmZpeFtpXTsKICAgIH0KICAgIHdoaWxlKHRvcCA+IDApIHsgCiAgICAgICAgcG9zdGZpeFtqKytdID0gc3RhY2tbdG9wLS1dOwogICAgfQp9IAoKaW50IHByaW9yaXR5KGNoYXIgb3ApIHsgCiAgICBzd2l0Y2gob3ApIHsgCiAgICAgICAgY2FzZSAnKyc6IGNhc2UgJy0nOiByZXR1cm4gMTsKICAgICAgICBjYXNlICcqJzogY2FzZSAnLyc6IHJldHVybiAyOwogICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICB9IAp9IAoKZG91YmxlIGV2YWwoY2hhciogaW5maXgpIHsKICAgIGNoYXIgcG9zdGZpeFtNQVhdPSB7J1wwJ307CiAgICBjaGFyIG9wbmRbMl0gPSB7J1wwJ307CiAgICBkb3VibGUgc3RhY2tbTUFYXSA9IHswLjB9OyAKICAgIAogICAgaW5Ub1Bvc3RmaXgoaW5maXgsIHBvc3RmaXgpOyAgICAKCiAgICBpbnQgdG9wLCBpOwogICAgZm9yKHRvcCA9IDAsIGkgPSAwOyBwb3N0Zml4W2ldICE9ICdcMCc7IGkrKykgc3dpdGNoKHBvc3RmaXhbaV0pIHsgCiAgICAgICAgY2FzZSAnKyc6IGNhc2UgJy0nOiBjYXNlICcqJzogY2FzZSAnLyc6IAogICAgICAgICAgICBzdGFja1t0b3AgLSAxXSA9IGNhbChwb3N0Zml4W2ldLCBzdGFja1t0b3AgLSAxXSwgc3RhY2tbdG9wXSk7IAogICAgICAgICAgICB0b3AtLTsgCiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICBkZWZhdWx0OiAKICAgICAgICAgICAgb3BuZFswXSA9IHBvc3RmaXhbaV07CiAgICAgICAgICAgIHN0YWNrWysrdG9wXSA9IGF0b2Yob3BuZCk7CiAgICB9ICAgICAgICAgICAgIAogICAgCiAgICByZXR1cm4gc3RhY2tbdG9wXTsKfQoKZG91YmxlIGNhbChjaGFyIG9wLCBkb3VibGUgcDEsIGRvdWJsZSBwMikgeyAKICAgIHN3aXRjaChvcCkgeyAKICAgICAgICBjYXNlICcrJzogcmV0dXJuIHAxICsgcDI7IAogICAgICAgIGNhc2UgJy0nOiByZXR1cm4gcDEgLSBwMjsgCiAgICAgICAgY2FzZSAnKic6IHJldHVybiBwMSAqIHAyOyAKICAgICAgICBjYXNlICcvJzogcmV0dXJuIHAxIC8gcDI7IAogICAgfSAKfQogICAg