请各位高手帮忙,写一个四则运算的算法,最好是C程序。例如可以根据字符串 1+2+3+4+5*6+((7+8)/5) 求出结果的程序或算法。急!
帖一个我n年前写的程序,基本上满足楼主的条件(在TC2.0里面通过):
#include<stdio.h> #include<stdlib.h>struct stack_node { int data; struct stack_node *next; }; typedef struct stack_node stack_list; typedef stack_list *link;
link operator=NULL; link operand=NULL;
link push(link stack, int value) { link new_node; new_node=(link)malloc(sizeof(stack_list)); if(!new_node) { printf(\"Overflow!\n\"); return NULL; } new_node->data=value; new_node->next=stack; stack=new_node; return stack; }
link pop(link stack, int *value) { link top; if(stack!=NULL) { top=stack; stack=stack->next; *value=top->data; free(top); return stack; } else *value=-1; }
int empty(link stack) { if(stack==NULL) return 1; else return 0; }
int isoperator(char op) { switch(op) { case '+': case '-': case '*': case '/': return 1; default: return 0; } }
int priority(char op) { switch(op) { case ')': return 3; case '*': case '/': return 2; case '+': case '-': return 1; case '(': return -1; default: return 0; } }
int get_value(int op, int operand1, int operand2) { switch((char)op) { case '*': return(operand2*operand1); case '/': return(operand2/operand1); case '-': return(operand2-operand1); case '+': return(operand2+operand1); } }
void main() { char exp[100]; int op=0; int operand1=0; int operand2=0; int result=0; int pos=0;
printf(\"Please input the expression:\n\"); gets(exp);
while(exp[pos]!='\0'&&exp[pos]!='\n') { if(exp[pos]==' ') { pos++; continue; } if(exp[pos]=='(') operator=push(operator,exp[pos]); else if(exp[pos]==')') { operator=pop(operator,&op); while(op!='(') { operand=pop(operand,&operand1); operand=pop(operand,&operand2); operand=push(operand,get_value(op,operand1,operand2)); operator=pop(operator,&op); } } else if(isoperator(exp[pos])) { while(priority(exp[pos])<=priority(operator->data)&&!empty(operator)) { operator=pop(operator, &op); operand=pop(operand, &operand1); operand=pop(operand, &operand2); operand=push(operand,get_value(op,operand1,operand2)); } operator=push(operator,exp[pos]); } else operand=push(operand,exp[pos]-48); pos++; } while(!empty(operator)) { operator=pop(operator,&op); operand=pop(operand,&operand1); operand=pop(operand,&operand2); operand=push(operand,get_value(op,operand1,operand2)); } operand=pop(operand,&result); printf(\"The result of expression [%s] is: %d\n\",exp,result); }
楼上的写的不错 正是最典型的栈操作
http://bbs.bc-cn.net/bbs/dispbbs.asp?boardID=39&ID=442&page=1
楼主若是想看计数器及四则混合运算方面的 就看上面的连接把