(本人小白,还没实现带括号的功能,后续更新上)
#include<stdio.h>
#include<string.h>
#define SIZE 100
int nums[SIZE];
char sign[SIZE];
#include<string.h>
#define SIZE 100
int nums[SIZE];
char sign[SIZE];
void queue_sign(char str[]){//存入运算符
int i,j=0;
for(i=0;i<strlen(str);i++){
if(str[i]=='+'||str[i]=='-'
||str[i]=='*'||str[i]=='/'){
sign[j]=str[i];
j++;
}
}
}
void queue_num(int str[]){ //存入数字栈
int i=0;
char * num1=strtok(str,"+-*/");
while(num1){
nums[i]=atoi(num1);
i++;
num1=strtok(NULL,"+-*/");
}
}
void cal() {//进行运算
int i=0;
for(i=0; i < strlen(sign); i++) {
if (sign[i] != '*' && sign[i] != '/') continue;
if (sign[i] != '*' && sign[i] != '/') continue;
if (sign[i] == '*') nums[i] *= nums[i+1];
if (sign[i] == '/') nums[i] /= nums[i+1];
move(i--);
}
while(sign[0] != NULL) {
if (sign[0] == '+') nums[0] += nums[1];
if (sign[0] == '-') nums[0] -= nums[1];
move(0);
}
if (sign[i] == '/') nums[i] /= nums[i+1];
move(i--);
}
while(sign[0] != NULL) {
if (sign[0] == '+') nums[0] += nums[1];
if (sign[0] == '-') nums[0] -= nums[1];
move(0);
}
}
// 将 nums & symbols 往前移动一个元素,从 index 位置开始
void move(int index) {
for( ; index < strlen(sign)+2; index++) {
nums[index + 1] = nums [index + 2];
sign[index] = sign[index + 1];
}
}
int main(){
char str[SIZE];
gets(str);
queue_sign(str);
queue_num(str);
cal();
printf("%d",nums[0]);
system("pause");
return ;
}