如何用键盘输入数学表达式
How to input a mathematical expression from keyboard?
我有一个简单的C程序
int main()
{
int n, maxn = 21;
float SN, x;
printf("input x:");
scanf("%f", &x);
printf("input maxn:");
scanf("%d", &maxn);
for(n=0;n<=maxn;n++){
SN = SN + pow(x,n);
n = n + 1;
}
printf("%f", SN);
getch();
return 0;
}
我需要使它通用,这样用户就可以输入任何表达式来用用户从键盘输入的任何内容替换pow(x,n)。如何将表达式放入程序中?
C和C++没有为您提供已经实现的此功能,因为编译时(对表达式进行语法分析时)和运行时(对它们进行求值时)之间存在明显的差距。
为表达式实现解析器和编译器/计算器是一项很好的练习,但这并非微不足道,可能需要比目前更多的经验(考虑到您提出的问题)。
在我看来,解决这个问题最容易理解的方法是递归下降语法分析器,但对于四个操作、数字和变量,我想它需要大约一百行代码。
yacc和bison是用于根据语法定义自动生成解析/评估代码的工具。我个人更喜欢手工编写解析器,因为你可以得到更好的控制(尤其是在错误处理或句法和语义层面的交互时,但这就是我,我也是NIH综合征的严重患者)。
相反,像Python或Javascript这样的高级语言为您提供了这个已经实现为eval
的功能。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何获取用户输入的算术表达式,如 5-8+7*4-8+9 或 1+5?
- C++如何使用表达式获取用户输入?
- 如何使用正则表达式将输入数字格式化为字符串
- C++:Lambda 表达式的输入
- 如何用键盘输入数学表达式
- 正则表达式在开头单独匹配单词,或者在输入结束时通过不重复字符串附加到某些内容但附加到某些内容
- 通过getline()输入,正则表达式无法正常工作
- getline 和在类函数中传递输入流,主表达式错误
- 检查输入字符串是否为数字且为C++,如果是,则将其转换为 int(正则表达式?
- 使用正则表达式进行输入验证
- 使用正则表达式检查输入的有效性
- 正则表达式的输入掩码
- 正则表达式库,用于维护状态,逐个字符接受输入,并在找到匹配时返回true
- 2位输入的表达式树
- 使用正则表达式验证输入
- 从输入中导出最小正则表达式
- 缓存重复输入数据的表达式求值