#include<stdio.h>
#include<stdlib.h>
int main() {
char str[100] = {"-32+6*9/2-8+4/2"};
char stackop[7] = {0};
int top1 = -1;
int stacknum[7] = {0};
int top2 = -1;
int a[10] = {0};
int sum=0;
char temp[10] = {0};
sscanf(str, "%d%c%d%c%d%c%d%c%d%c%d%c%d", &a[0], &temp[0], &a[1], &temp[1], &a[2], &temp[2], &a[3], &temp[3], &a[4], &temp[4],
&a[5], &temp[5], &a[6]);
for(int i=0;i<=6;i++){
stacknum[++top2]=a[i];
if(a>0&&(stackop[top1]=='*'||stackop[top1]=='/'))
{
stacknum[top2-1]=stackop[top1]=='*'?stacknum[top2-1]*stacknum[top2]:stacknum[top2-1]/stacknum[top2];
top1--;
top2--;
}
if(i<=5)
stackop[++top1]=temp[i];
}
if(top1!=-1) {
if (stackop[0] == '+')
sum = stacknum[0] + stacknum[1];
else
sum = stacknum[0] - stacknum[1];
for (int i = 1; i <= top1; i++) {
sum = stackop[i] == '-' ?sum-stacknum[i+1]:sum+stacknum[i+1];
}
}
printf("%d",sum);
return 0;
}
可以输入任何加减乘除正数负数的字符串,进行读取计算
#include<stdio.h>
#include<string.h>
//变化的数据串
int main() {
char expression[100] = {0}; //输入表达式
char stackop[100] = {0}; //运算符栈
int top1 = -1;
int stacknum[100] = {0}; //操作数栈
int top2 = -1;
int i = 0, count = 0;
int a[100] = {0};
int sum = 0;
char b[100] = {0};
char temp[100] = {0};
char *p = expression;
gets(expression);
while (*p != '\0') {
sscanf(p, "%d", &a[i]);
sprintf(temp, "%d", a[i]);
p += strlen(temp);
if (*p != '\0') {
sscanf(p, "%c", &b[i]);
sprintf(temp, "%c", b[i]);
p += strlen(temp);
}
i++;
}
for (count = 0; count <= i; count++) {
stacknum[++top2]=a[count];
if(count>0&&(stackop[top1]=='*'||stackop[top1]=='/'))
{
stacknum[top2-1]=stackop[top1]=='*'?stacknum[top2-1]*stacknum[top2]:stacknum[top2-1]/stacknum[top2];
top1--;
top2--;
}
if(count<=i-1)
stackop[++top1]=b[count];
}
if(top1!=-1) {
if (stackop[0] == '+')
sum = stacknum[0] + stacknum[1];
else
sum = stacknum[0] - stacknum[1];
for (count = 1; count <= top1; count++) {
sum = stackop[count] == '-' ?sum-stacknum[count+1]:sum+stacknum[count+1];
}
}
printf("%d",sum);
return 0;
}
#include <stdio.h>
#include <string.h>
void *del_space(char *str) {
char *q = str;
for (char *p = str; *p != '\0'; p++) {
if (*p != '\x20') {
*q = *p;
q++;
}
}
*q = '\0';
}
int main() {
int sum = 0;
int val = 0;
char expression[1000] = {0};
char sym = 0;
char temp[11] = {0};
gets(expression);//读入一整行的数据。
del_space(expression);//为处理方便,删除空格
int stack[40000] = {0};//栈
int *sp = stack + 40000;//初始化栈顶指针
char *p = expression;
sscanf(p, "%d", --sp);
sprintf(temp, "%d", *(sp));
p += strlen(temp);
while ((sym = *p) != '\0') {
if (sym == '+') {
p++;
sscanf(p, "%d", --sp);
sprintf(temp, "%d", *sp);
p += strlen(temp);
} else if (sym == '-') {
p++;
sscanf(p, "%d", &val);
*(--sp) = -val;
sprintf(temp, "%d", -val);
p = p+strlen(temp)-1;
} else if (sym == '*' || sym == '/') {
p++;
sscanf(p, "%d", &val);
sym == '*' ? (*sp *= val) : (*sp /= val);
sprintf(temp, "%d", val);
p += strlen(temp);
}
}
for (; sp < stack + 40000; sp++) {
sum += *sp;
}
printf("%d", sum);
}