如何在C语言中实现支持字符变量的计算器
支持小写字母变量的计算器实现思路
需求说明
我要实现一款支持小写字母(a-z,每个字母均可存储值)作为变量的计算器,需完成以下三类操作:
- 为变量赋值,示例:
a = 1 - 使用变量计算并直接输出结果,示例:
3 + a - 将计算结果赋值给变量,示例:
b = 3 + 1或c = 6 * b
支持的输入示例:
x=3 // 变量x被赋值为3
d=9 // 变量d被赋值为9
35 // 输出计算结果
h=9/3 // 变量h被赋值为9/3的计算结果
x * h // 输出xh的结果,因x=3、h=3,最终输出9
i=d/x // 变量i被赋值为d/x的结果,输出3
我不需要具体代码片段,只需要解决该问题的思路。
核心实现思路
1. 变量存储方案
用一个长度为26的数组对应a-z(比如int vars[26]),数组索引与字母顺序一一对应(a对应索引0,b对应1,…,z对应25),可快速通过字母定位存储位置。初始化时可将所有变量设为0,或单独处理未赋值变量的异常情况。
2. 输入预处理与分类
首先去除输入中的所有空格(兼容a = 1和a=1两种输入格式),再根据输入结构分为三类:
- 纯赋值:格式为
变量=值/变量,比如x=3、i=d - 纯表达式计算:格式为
值/变量 运算符 值/变量,比如3*5、x*h - 赋值+表达式:格式为
变量=表达式,比如h=9/3、c=6*b
判断逻辑:
- 若输入包含
=:拆分出左侧变量名,右侧内容要么是单个值/变量,要么是完整表达式 - 若输入不包含
=:直接将整个内容当作表达式处理
3. 表达式求值逻辑
表达式由操作数(数字或变量)和运算符(+、-、*、/)组成,求值步骤:
- 识别每个操作数的类型:
- 若为数字字符串,用
atoi等工具转换为整数 - 若为单个小写字母,从变量数组中取出对应的值
- 若为数字字符串,用
- 根据运算符执行计算,注意处理除法时除数为0的异常场景
4. 整体执行流程
- 循环读取用户输入,直到触发退出指令(比如输入
exit) - 预处理输入:去除所有空格
- 判断输入类型,执行对应逻辑:
- 纯赋值:将右侧值存入左侧变量
- 纯表达式:计算结果并输出
- 赋值+表达式:先计算表达式结果,存入左侧变量,同时输出结果(参考示例需求)
当前编写的代码
int main(void) { int weiter = 1; do { char eingabe[21]; int zahl1 = 0; int zahl2 = 0; int ergebnis = 0; char op = ' '; int retval = 0; retval = scanf("%s", &eingabe); printf("retval = %d\n", retval); printf("eingabe[0] = %c\n", eingabe[0]); // fall2 zahl opo char char *peingabe = &(eingabe[0]); printf("peingabe = %c\n", *peingabe); char *temp = strpbrk(peingabe, "+-*/="); op = *temp; printf("Op = %c\n", op); temp = strtok(peingabe, "+-*/"); printf("1.temp = %s\n", temp); zahl1 = atoi(temp); printf("Zahl_1 = %d\n", zahl1); temp = strtok(NULL, "+-*/"); printf("2.temp = %s\n", temp); zahl2 = atoi(temp); printf("Zahl_2 = %d\n", zahl2); // fall3 char gleich zahl // fall4 char op zahl // fall5 char op char // fall6 char=zahl op zahl // fall7 char=char op zahl // fall8 char=zahl op char // fall9 char=char op char // fall10 char gleich char switch (op) { case '+': ergebnis = zahl1 + zahl2; printf("Sum = %d\n", ergebnis); break; case '-': ergebnis = zahl1 - zahl2; printf("Sum = %d\n", ergebnis); break; case '*': ergebnis = zahl1 * zahl2; printf("Sum = %d\n", ergebnis); break; case '/': ergebnis = zahl1 / zahl2; printf("Sum = %d\n", ergebnis); break; default: printf("Error\n"); weiter = 0; break; } } while (weiter > 0); return 0; }
内容的提问来源于stack exchange,提问作者Mysterion
相关产品推荐
相关产品推荐

