// 函数声明
double calculate(const char* expr);
double parse_expression(const char** expr);
double parse_term(const char** expr);
double parse_factor(const char** expr);
// 计算表达式
double calculate(const char* expr) {
return parse_expression(&expr);
}
// 解析表达式
double parse_expression(const char** expr) {
double result = parse_term(expr);
while (**expr == '+' || **expr == '-') {
char op = **expr;
(*expr)++;
double value = parse_term(expr);
if (op == '+') {
result += value;
} else {
result -= value;
}
}
return result;
}
// 解析因子
double parse_factor(const char** expr) {
double result = 0;
// 跳过空白字符
while (isspace(**expr)) {
(*expr)++;
}
if (**expr == '(') {
(*expr)++;
result = parse_expression(expr);
if (**expr == ')') {
(*expr)++;
}
} else {
while (isdigit(**expr)) {
result = result * 10 + (**expr - '0');
(*expr)++;
}
}
// 跳过空白字符
while (isspace(**expr)) {
(*expr)++;
}
return result;
}
int main() {
char *expr = "1*3+5*9";
// 计算并输出结果
double result = calculate(expr);
printf("结果是:%lf\n", result);
return 0;
}
C实现计算器 支持混合运算 加减乘除求余和括号
于 2024-07-16 21:07:11 首次发布