C 之四则运算表达式求值
标签:临时 lin index efault eof 命令 cas 存在 define
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #define inf float(0x3f3f3f3f) #define MAXSIZE 100 char priority[7] = {‘ ‘, ‘-‘, ‘*‘, ‘/‘, ‘(‘, ‘)‘, ‘#‘}; char priority_relationship[7][7] = { {‘>‘, ‘>‘, ‘<‘, ‘<‘, ‘<‘, ‘>‘, ‘>‘}, {‘>‘, ‘>‘, ‘<‘, ‘<‘, ‘<‘, ‘>‘, ‘>‘}, {‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘<‘, ‘>‘, ‘>‘}, {‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘<‘, ‘>‘, ‘>‘}, {‘<‘, ‘<‘, ‘<‘, ‘<‘, ‘<‘, ‘=‘, ‘ ‘}, {‘>‘, ‘>‘, ‘>‘, ‘>‘, ‘ ‘, ‘>‘, ‘>‘}, {‘<‘, ‘<‘, ‘<‘, ‘<‘, ‘<‘, ‘ ‘, ‘=‘} }; typedef struct StackNode { char data[MAXSIZE]; // 压入栈里面的数据都是字符型,在进行运行时,记得将字符型数字转换为整型数字 struct StackNode *next; }StackNode, *LinkStack; void InitStack(LinkStack &S) {// 构造一个空栈S,栈顶指针置空 S = NULL; } void Push(LinkStack &S, char data[]) {// 在栈顶插入元素data StackNode *p; p = (StackNode *)malloc(sizeof(StackNode)); // 生成新的结点 strcpy(p->data, data); // 将新结点的数据域置为data p->next = S; // 将新结点插入栈顶 S = p; // 修改栈顶指针为p } char *Pop(LinkStack &S) {// 删除S的栈顶元素, 用data返回其值 char data[MAXSIZE]; if(S == NULL) printf("错误!!!n栈为空, 无法执行删除命令..."); else { StackNode *p; strcpy(data, S->data); // 将栈顶元素赋给data p = S; // 用p临时保存栈顶元素的空间,以备释放 S = S->next; //修改栈顶指针 free(p); // 释放原栈顶元素的空间 return data; } } char *GetTop(LinkStack &S) { if(S != NULL) return S->data; else { printf("错误!!!n栈顶为空"); return "0"; } } float str_to_float(char *str) { float num = 0; int state_1 = 0; int state_2 = 0; while(( *str != ‘