计算包含数字和加减的字符串,返回整数,请用C语言实现
时间: 2023-11-24 20:05:11 浏览: 38
可以使用栈来实现字符串表达式的计算。
具体实现步骤如下:
1. 定义一个栈,用于存储数字和运算符。
2. 遍历字符串表达式,如果是数字则入栈;如果是运算符,则判断栈顶元素是否为数字,如果是则弹出两个数字进行运算,并将结果入栈。
3. 遍历结束后,栈顶元素即为表达式的计算结果。
以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
int stack[MAX_SIZE]; // 定义栈
int top = -1; // 栈顶指针
int is_digit(char c) {
return (c >= '0' && c <= '9');
}
void push(int x) {
if (top == MAX_SIZE - 1) {
printf("Stack overflow\n");
exit(1);
}
stack[++top] = x;
}
int pop() {
if (top == -1) {
printf("Stack underflow\n");
exit(1);
}
return stack[top--];
}
int evaluate(char* expr) {
int len = strlen(expr);
int i = 0;
while (i < len) {
if (is_digit(expr[i])) {
int num = 0;
while (i < len && is_digit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
push(num);
} else if (expr[i] == '+' || expr[i] == '-') {
if (top < 1) {
printf("Invalid expression\n");
exit(1);
}
int b = pop();
int a = pop();
if (expr[i] == '+') {
push(a + b);
} else {
push(a - b);
}
i++;
} else {
printf("Invalid character %c\n", expr[i]);
exit(1);
}
}
if (top != 0) {
printf("Invalid expression\n");
exit(1);
}
return stack[top];
}
int main() {
char expr[MAX_SIZE];
printf("Enter an arithmetic expression: ");
fgets(expr, MAX_SIZE, stdin);
expr[strlen(expr) - 1] = '\0'; // 去掉换行符
int result = evaluate(expr);
printf("Result = %d\n", result);
return 0;
}
```
示例输入输出:
```
Enter an arithmetic expression: 2+3-4+5
Result = 6
```
```
Enter an arithmetic expression: 2+3-
Invalid expression
```
```