#include #include #include #define MAX 100 char input[MAX]; //inputstring char token[20]; char token_data[MAX][20];//TokenData char P_token_data[MAX][20];//Post Token Data char OperMang[MAX];//operMang char Value[MAX];//Valu int Tcount = 0;//numToken int Ptcount;//numPostToken int top = -1; int vtop = -1; void Token() { int input_length = strlen(input); int count = 0; int Tdcount = 0; int swit; int i; if (input_length == 0) return; swit = 1; while(count < input_length) { if((input[count] >='0' && input[count] <='9') || input[count] == '.') { token[Tdcount++] = input[count++]; swit = 1; } else if(input[count] == '+' || input[count] == '-' || input[count] == '*' || input[count] == '/' || input[count] =='(' || input[count] ==')') { if ( swit == 1 ) { token[Tdcount] = '\0'; strcpy(token_data[Tcount++],token); Tcount = 0; token[Tdcount++] = input[count++]; token[Tdcount] = '\0'; strcpy(token_data[Tcount++],token); swit = 0; Tcount = 0; } else { Tcount = 0; token[Tdcount++] = input[count++]; token[Tdcount] = '\0'; strcpy(token_data[Tcount++],token); swit = 0; Tcount = 0; } } else if (input[count] == ' ') { if(Tdcount > 0) { token[Tdcount] = '\0'; strcpy(token_data[Tcount++],token); } swit = 0; Tdcount = 0; count ++; } token[Tdcount] = '\0'; strcpy(token_data[Tcount++],token); for(i=0; i= '0' && token_data[i][0] <= '9') { strcpy(P_token_data[count],token_data[i]); count++; } else { switch(token_data[i][0]) { case '(' : OperMang[++top] = '('; break; case '-': if (top == -1) OperMang[++top] = '-'; break; case '+': if (top == -1) OperMang[++top] = '+'; break; case '*': if (top == -1) OperMang[++top] = '*'; break; case '/': if (top == -1) OperMang[++top] = '/'; break; case ')': break; } } } } void Eval() { double data, data1, data2; int i; for(i = 0; i < Ptcount ; i++) { if ( P_token_data[i][0] >= '0' && P_token_data[i][0] <= '9') { Value[++vtop] = atof(P_token_data[i]); } else { switch(token_data[i][0]) { case '-': data2 = Value[vtop--]; data1 = Value[vtop--]; data = data1 - data2; Value[++vtop] = data; break; case '+': data2 = Value[vtop--]; data1 = Value[vtop--]; data = data1 + data2; Value[++vtop] = data; break; case '*': data2 = Value[vtop--]; data1 = Value[vtop--]; data = data1 * data2; Value[++vtop] = data; break; case '/': data2 = Value[vtop--]; data1 = Value[vtop--]; data = data1 / data2; Value[++vtop] = data; break; } } } if ( vtop != 0 ) printf("¹®Á¦ ¹ß»ý\n"); else printf("¼ö½ÄÀÇ °á°ú°ª : %lf\n",Value[vtop]); } int main() { int k = 0; char c; printf("¼ö½ÄÀ» ÀÔ·ÂÇϽÿÀ : "); while(1) { c = getchar(); if(c == 10) break; input[k++] = c; } input[k] = '\0'; Token(); P_token(); Eval(); }