gpt4 book ai didi

c++ - C/C++ : Passing a string read to a loop inside a program in C

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:30 26 4
gpt4 key购买 nike

我在一个程序中工作,该程序应该读取用户输入的字符串并在循环中使用该字符串进行基本计算。我的一般问题是在循环中使用字符串,尽管稍后它必须做更多的事情,但从现在开始我只需要为输入的表达式测试 Bolzano 定理(特别是找到根的可能间隔)。我已经开始研究一个按字符读取输入字符并使用开关控件计算中缀表达式的函数。但是,我想知道是否有办法做这样的事情:

{
/*Already stored the doubles: a, b, precision.*/
printf("Enter the expression you want to calculate");
scanf("%s", expression);
/*User input: (3*i)+(i*i)-3*/
while( i <= b ){
fa = (3*i)+(i*i)-3; /*How to insert the string here*/
fb = (3*(i+precision))+((i+precision)*(i+precision))-3;
if( fa*fb < 0 )
printf("There is at least one root in the interval: [ %g, %g ].", a, a+precision);
/*And goes on...*/
}

假设用户没有在循环中输入无效的表达式(例如 i^7)或者我已经实现了转换这些表达式的控件(比如读取字符串并将其更改为后缀或前缀进行必要转换的符号),有没有办法在循环中使用赋值中存储的字符串?

最佳答案

我想您要问的是:给定一个包含一些数学表达式的字符串,我该如何计算该表达式?

我不知道你是否可以对表达式的语法做出某些假设;如果是这样,那将帮助您简化代码。如果没有,您基本上必须首先“标记化”您的字符串,因为上面的字符串将是这样的标记序列:

LBRACKET, NUM, BINOP, VAR, RBRACKET, BINOP, LBRACKET, VAR, BINOP, VAR, RBRACKET, BINOP, NUM

您还必须自己构建一个小的解析器,以确保您的表达式是根据某些句法规则形成的;解析器将使用该标记序列。解析器的输出是表示该表达式的数据结构(通常是树)。给定该树,您可以通过自下而上计算子表达式来评估表达式。

fa =                       -
/ \
+ 3
/ \
* *
/ \ / \
3 i i i

只需将新节点添加到该树中即可添加您的精度操作数。

网上有一些关于如何做到这一点的资料。只需搜索“如何构建表达式求值器”,例如 this页面提供了更多详细信息。

关于c++ - C/C++ : Passing a string read to a loop inside a program in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com