#include #include #include #define MAX 100 int datalength = 0; int intput_datalength = 0; int ncount = 0; int ocount = 0; int scount = 0; int i = 0; int row =0; int column = 0; int temp = 0; char token[MAX][MAX] = {NULL}; char numdata[MAX][MAX] = {}; double f_postfix[MAX]; void Tokenize(char input_infix[]){ //ÀԷ¹ÞÀº °ªÀ» ¼ýÀÚ¿Í ¿¬»êÀÚ·Î ³ª´©¾î ÁÜ for(; i < intput_datalength; i++) { if(input_infix[i] == '+' || input_infix[i] == '-' || input_infix[i] == '*' || input_infix[i] == '/' || input_infix[i] == '(' || input_infix[i] == ')' ) { temp = i; token[row][column] = NULL; ++row; column=0; } token[row][column] = input_infix[i]; if(input_infix[i] == '+' || input_infix[i] == '-' || input_infix[i] == '*' || input_infix[i] == '/' || input_infix[i] == '(' || input_infix[i] == ')' ) { token[row][column+1] = NULL; ++row; } if((input_infix[i] >= '0' && input_infix[i] <= '9') || input_infix[i] == '.') column++; if(input_infix[i+1] == '=') ++row; } token[row][0] = '='; printf("\n"); } void fuction(char operat[]){ // ÁßÀ§°è»ê½ÄÀ» ÈÄÀ§°è»ê½ÄÀ¸·Î º¯°æ for(; i < row+1; i++) { if(token[i][0] == ')') { //')'À» ¸¸³ª¸é operat¹è¿­ÀÇ ¿¬»êÀÚ¸¦ ¸ðµÎ numdata¹è¿­·Î ¿Å°Ü¼­ ¸®ÅÏ for(int j = ocount-1; j >= 0 ;j--) { numdata[ncount++][0] = operat[j]; } ocount = 0; i++; return; } if(token[i][0] == '('){ //'('À» ¸¸³ª¸é °ýÈ£°¡ ³¡³¯ ¶§±îÁö operat¹è¿­¿¡ ¿¬»êÀÚ¸¦ ÀúÀå i++; fuction(operat); } if(token[i][0] == '=') //¸¶Áö¸·¿¡ ¿¬»êÀڹ迭¿¡ ÀÖ´ø ¿¬»êÀÚ¸¦ numdata·Î ¿Å°ÜÁØ´Ù { for(int k=ocount-1; k>=0; k--) { numdata[ncount][0] = operat[k]; ncount++; } break; } if((token[i][0] >= '0' && token[i][0] <= '9') || token[i][0] == '.') //¼ýÀÚÀÏ °æ¿ì numdata¿¡ ¹Ù·Î ÀúÀå { strcpy(numdata[ncount++],token[i]); } else //¼ýÀÚ°¡ ¾Æ´Ò °æ¿ì { ++scount; if(token[i][0] == '+' || token[i][0] == '-') { if(operat[ocount-1] == '+' || operat[ocount-1] == '-' || operat[ocount-1] == '*' || operat[ocount-1] == '/') { for(int j=ocount-1; j>=0; j--) { numdata[ncount][0] = operat[j]; ncount++; } ocount = 0; } operat[ocount] = token[i][0]; ocount++; }else if(token[i][0] == '*' || token[i][0] == '/') { if(operat[ocount-1] == '*' || operat[ocount-1] == '/') //¿¬»êÀڹ迭¿¡ ¹Ù·Î Àü¿¡ µé¾î¿Â ¿¬»êÀÚ°¡ *³ª /ÀÏ °æ¿ì { numdata[ncount][0] = operat[ocount-1]; ncount++; operat[ocount-1] = token[i][0]; }else { operat[ocount] = token[i][0]; ocount++; } } } } printf("ÅäÅ« ºÐ¸®\n"); for(int k = 0; k < row; k++){ printf("%s\n",token[k]); } printf("\n"); } void calculate() // ÈÄÀ§°è»ê½ÄÀ¸·Î ¹Ù²Û ¹è¿­À» °è»ê { int fcount = 0; for(int j=0; j= '0' && numdata[j][0] <= '9') { f_postfix[fcount++] = atof(numdata[j]); } else { if(numdata[j][0]=='*') { f_postfix[fcount-2] = f_postfix[fcount-2] * f_postfix[fcount-1]; } else if(numdata[j][0]=='/') { f_postfix[fcount-2] = f_postfix[fcount-2] / f_postfix[fcount-1]; } else if(numdata[j][0]=='-') { f_postfix[fcount-2] = f_postfix[fcount-2] - f_postfix[fcount-1]; } else if(numdata[j][0]=='+') { f_postfix[fcount-2] = f_postfix[fcount-2] + f_postfix[fcount-1]; } } } } int main() { char input_infix[MAX] = {}; char infix[MAX] = {}; char operat[MAX] = {}; int ccount = 0; printf("½Ä ÀÔ·Â :"); //scanf("%s",&input_infix); char input; while((input = getchar()) !='=') { input_infix[ccount++] = input; } input_infix[ccount] = '='; intput_datalength = strlen(input_infix); Tokenize(input_infix); i = 0; datalength = strlen(infix); fuction(operat); calculate(); printf("ÈÄÀ§Ç¥±â½Ä :"); for(int j=0; j