1、一个字符串里面包含运算符,要转成正常运算的运算符,可以用 宏指令。相当于直接执行语句。宏指令在不同语言中执行方式不同的。
2、例程:
//基本的堆栈思想
#include
#include
typedef struct
{
int * base;
int * top;
int size;
} stack_i;
void initStack_I(stack_i * int_sta)
{
int_sta->base = (int *)malloc(sizeof(int) * 100);
int_sta->top = int_sta->base;
int_sta->size = 100;
}
void deleteStack_I(stack_i * int_sta)
{
free(int_sta->base);
}
void push_I(stack_i * int_sta, int i)
{
if(int_sta->top - int_sta->base >= int_sta->size)
{
return;
}
*(int_sta->top++) = i;
}
void pop_I(stack_i * int_sta, int * i)
{
if(int_sta->top == int_sta->base)
{
return;
}
*i = *(--int_sta->top);
}
int main(void)
{
int i;
int temp, temp1;
int sum = 0;
char c; //当前字符
char lastc = 0; //上一个字符
stack_i IS;
initStack_I(&IS);
scanf("%d", &i); //接收第一个数字
push_I(&IS, i); //压栈
while(1)
{
scanf("%c", &c); //接收第一个字符
if(c == '\n') //换行符就退出
{
break;
}
switch(c)
{
case '+':
if(lastc == '+') //上次也是一个加号的话
{
pop_I(&IS, &temp); //弹出上一个数字
pop_I(&IS, &temp1); //弹出上一个数字
sum = temp + temp1; //加法计算
push_I(&IS, sum); //新的结果压栈
}
scanf("%d", &i); //接收一个数字进来
push_I(&IS, i); //压栈
lastc = c;
break;
case '*':
scanf("%d", &i); //接收一个数字进来
pop_I(&IS, &temp); //弹出上一个数字
sum = i * temp; //乘法计算
push_I(&IS, sum); //新的结果压栈
break;
}
}
temp1 = 0;
pop_I(&IS, &temp);
pop_I(&IS, &temp1);
sum = temp + temp1;
printf("%d\n", sum);
deleteStack_I(&IS);
return 0;
}