C语言整数的四则运算表达式求值,输入字符串
时间: 2024-10-08 13:22:27 浏览: 46
在C语言中,处理整数的四则运算表达式通常涉及字符串解析和计算。当你从用户那里获取一个包含加减乘除运算符和数字的字符串时,你需要按照以下步骤来进行:
1. **读取并初始化**:
- 使用`fgets()`函数读取一行用户的输入作为字符串。
- 检查是否以空格、等号('=',)或者换行符结束,因为这些都是运算符或表达式的结尾。
2. **处理运算符优先级**:
- 利用栈数据结构,遵循运算符的优先级规则(如先乘除后加减,左括号先于右括号)来存储操作符和数字。
3. **解析字符串**:
- 遍历输入字符串,识别数字(通过检查字符是否为数字字符),并将它们转换成整数。
- 当遇到运算符时,从栈顶取出最近的两个操作数,做相应的运算,并将结果压回栈。
4. **执行计算**:
- 对于每个剩余的操作数,执行与栈顶运算符匹配的运算。
- 最终,栈上剩下的数字就是表达式的最终结果。
5. **错误处理**:
- 如果字符串无法正确解析,例如有未知字符或者不符合数学规定的表达式,需要捕获并报告错误。
以下是简化版的伪代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calculate(char *expr); // 实现计算函数
int main() {
char input[100];
fgets(input, sizeof(input), stdin);
int result = calculate(input);
printf("Result: %d\n", result);
return 0;
}
int calculate(char *expr) {
stack_t operations; // 定义一个栈
int num1 = 0, num2;
bool is_num = false;
for (char c : expr) {
if (isdigit(c)) {
if (!is_num) {
num1 = num1 * 10 + (c - '0');
} else {
num2 = num1;
num1 = 0;
is_num = true;
}
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
if (is_num) {
operations.push(num2);
operations.push(is_num ? num1 : num1 / 10); // 根据当前数字位数处理
num1 = 0;
is_num = false;
}
operations.push(c);
} else if (c == EOF || c == '\n') {
if (is_num)
operations.push(num1);
return evaluate(operations);
}
}
return evaluate(operations);
}
```
在这个例子中,`evaluate()`是一个辅助函数用于根据栈中的操作符和数值执行实际的计算,这里省略了细节。记住,这个过程通常会涉及到递归或者复杂的算法来处理嵌套的运算符和括号。
阅读全文