news 2026/4/23 17:21:02

运算表达式求值c代码(用栈实现)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
运算表达式求值c代码(用栈实现)

author: hjjdebug
date: 2026年 01月 12日 星期一 14:27:03 CST
descrp: 运算表达式求值c代码(用栈实现)


文章目录

  • 1. 运算是计算机的强项
  • 2 字符串解析函数
  • 3. 代码说明:
  • 4. 代码

计算机与人的接口. 让计算机理解人的意图.
计算机最擅长固定的操作, 它的要素是存储数据,对数据运算.
人机的接口必须要按照一种规则, 规则应该是越简单越好, 但也要符合人的习惯,不能迁就计算机.
我们熟知的运算表达式求值无疑就是最基础的人机交互接口.
规则是先计算括号内的值, 乘除运算高于加减运算

1. 运算是计算机的强项

至于运算,非常简单. 一个函数就能搞定.
假定数值是int型

// 计算函数
int applyOp(int a, int b, char op) {
switch (op) {
case ‘+’: return a + b;
case ‘-’: return a - b;
case ‘*’: return a * b;
case ‘/’: return a / b;
}
return 0;
}

关键是如何调用到这个函数. 调用逻辑怎样写,这就是程序框架.
而且用户的输入是灵活的, 它可能输入任何表达式, 并不会是固定的.

2 字符串解析函数

如何应对不同的字符串?

这离不开字符串解析函数. 由于字符串并不是固定的,所以必须按照约定的规则进行.
把字符串一个字符一个字符的进行分析, 分析出词,形成token, 这叫词法分析.
由词根据前后关系解析出意义这叫句法分析. 这个解析的过程都在主框架中.
把字符串分析完了,结果也就出来了.

3. 代码说明:

实现了基本的四则运算(+ - * /)和括号优先级处理
使用两个栈分别存储操作数和操作符
支持多位数操作数和空格分隔符
通过优先级函数控制运算顺序
主函数实现命令行交互

核心: 用一个栈来存储数据,用一个栈来存储操作符号.
当发现满足运算条件时,执行运算.

4. 代码

$ cat main.c#include<stdio.h>// for printf#include<stdlib.h>// for exit,malloc,free#include<string.h>// for strchr, strlen#include<assert.h>// for assert// 优先级函数intprecedence(charop){if(op=='+'||op=='-')return1;if(op=='*'||op=='/')return2;return0;}// 操作数判断intisDigit(charc){return(c>='0'&&c<='9');}// 计算函数intcalculate(inta,intb,charop){switch(op){case'+':returna+b;case'-':returna-b;case'*':returna*b;case'/':returna/b;}return0;}#defineAPPLY_OPERATOR\assert(val_index>=2);\assert(op_index>=1);\intval2=values[val_index-1];\val_index--;\intval1=values[val_index-1];\val_index--;\charop=ops[op_index-1];\op_index--;\values[val_index++]=calculate(val1,val2,op);// 求值函数intevaluate(char*exp){inti;intlen=strlen(exp);if(len==0)return0;// 万一是空串int*values=malloc(len*sizeof(int));// 操作数栈char*ops=malloc(len*sizeof(char));// 操作符栈intval_index=0,op_index=0;for(i=0;i<len;i++){if(exp[i]==' ')continue;// 忽略空格if(isDigit(exp[i])){intval=0;while(i<len&&isDigit(exp[i])){val=(val*10)+(exp[i]-'0');i++;}values[val_index++]=val;i--;// 调整索引}elseif(exp[i]=='('){ops[op_index++]=exp[i];}elseif(exp[i]==')'){while(op_index>0&&ops[op_index-1]!='('){APPLY_OPERATOR;}if(op_index>0&&ops[op_index-1]=='('){op_index--;}}elseif(strchr("+-*/()",exp[i])==NULL){printf("错误: 非法字符 '%c'\n",exp[i]);exit(EXIT_FAILURE);}else{while(op_index>0&&precedence(ops[op_index-1])>=precedence(exp[i])){APPLY_OPERATOR;}ops[op_index++]=exp[i];}}while(op_index>0){APPLY_OPERATOR;}intresult=values[0];free(values);free(ops);returnresult;}intmain(intargc,char*argv[]){/* char buf[1000]; printf("请输入运算表达式: "); char *p=fgets(buf, sizeof(buf), stdin); assert(p!=NULL); buf[strcspn(buf, "\n")] = 0; // 去除换行符 int result = evaluate(buf); */if(argc!=2){printf("Usage: %s expression\n",argv[0]);printf("Example: %s \"1+2*3\"\n",argv[0]);exit(0);}intresult=evaluate(argv[1]);printf("结果: %d\n",result);return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:34:33

高效多语言互译新选择|基于HY-MT1.5大模型镜像实战解析

高效多语言互译新选择&#xff5c;基于HY-MT1.5大模型镜像实战解析 1. 引言&#xff1a;多语言翻译的工程挑战与HY-MT1.5的破局之道 在全球化数字服务快速发展的背景下&#xff0c;高质量、低延迟的机器翻译能力已成为企业出海、内容本地化和跨语言协作的核心基础设施。然而&…

作者头像 李华
网站建设 2026/4/23 16:16:44

2026亲测推荐:成都口碑好的有机肥厂家

2026亲测推荐&#xff1a;成都口碑好的有机肥厂家开篇&#xff1a;定下基调随着现代农业对环保和可持续发展的重视&#xff0c;有机肥成为了越来越多农户和种植户的首选。然而&#xff0c;市场上的有机肥品牌众多&#xff0c;如何选择一款适合自己的产品成为了一个难题。本文将…

作者头像 李华
网站建设 2026/4/23 10:23:01

AI分类从入门到实战:免环境配置,1块钱起步体验

AI分类从入门到实战&#xff1a;免环境配置&#xff0c;1块钱起步体验 1. 什么是AI分类&#xff1f;从生活场景说起 想象你正在整理衣柜&#xff1a;把上衣挂左边&#xff0c;裤子放右边&#xff0c;袜子收进抽屉——这就是最基础的分类行为。AI分类做的事情类似&#xff0c;…

作者头像 李华
网站建设 2026/4/23 10:25:30

AI万能分类器进阶:云端分布式训练全指南

AI万能分类器进阶&#xff1a;云端分布式训练全指南 1. 为什么需要分布式训练&#xff1f; 研究生做AI课题时最常遇到的困境&#xff1a;实验数据量暴涨后&#xff0c;原本单卡训练需要两周时间&#xff0c;但论文截稿日期就在眼前。实验室GPU配额有限&#xff0c;导师的经费…

作者头像 李华
网站建设 2026/4/23 10:24:34

AI分类器在电商的应用:云端GPU实战,3步实现自动打标

AI分类器在电商的应用&#xff1a;云端GPU实战&#xff0c;3步实现自动打标 引言&#xff1a;为什么电商需要AI自动打标&#xff1f; 作为淘宝店主&#xff0c;你是否每天花费数小时手动给商品分类打标&#xff1f;服装要分男女款、季节、风格&#xff1b;电子产品要分品牌、…

作者头像 李华
网站建设 2026/4/23 10:23:57

AI万能分类器极限测试:100万数据5小时处理完

AI万能分类器极限测试&#xff1a;100万数据5小时处理完 引言 当你的团队需要处理海量文本分类任务时&#xff0c;是否遇到过这样的困境&#xff1a;本地机器跑不动&#xff0c;临时采购硬件又太慢&#xff0c;云服务配置起来太复杂&#xff1f;今天我要分享的正是解决这些痛…

作者头像 李华