在C语言中使用字符串作为数学表达式
我想知道是否有任何方法可以将表达式作为字符串,并将其作为数学表达式进行计算在C语言中使用字符串作为数学表达式,c,string,C,String,我想知道是否有任何方法可以将表达式作为字符串,并将其作为数学表达式进行计算 #include <stdio.h> #include <conio.h> void main { char expression[100]; int answer; scanf("%s", &expression); // Let expression = "10+5" answer = expression printf("%d", answer); // Print
#include <stdio.h>
#include <conio.h>
void main {
char expression[100];
int answer;
scanf("%s", &expression);
// Let expression = "10+5"
answer = expression
printf("%d", answer);
// Print 15
getch();
}
#包括
#包括
真空总管{
字符表达式[100];
int答案;
scanf(“%s”,表达式(&s);
//让表达式=“10+5”
答案=表达
printf(“%d”,答案);
//打印15
getch();
}
是否有任何库或内置函数可以帮助我完成此任务?我使用的是Turbo C++ 3。
我不能使用现代编译器,因为它包含在我们的教学大纲中。不
answer=expression
毫无意义。如果您打算answer=find_answer(expression)
,并且这个函数find_answer()
是您真正想知道的,如果它存在,答案仍然是“否”。C中没有内置的数学字符串解析器。您可以自己编写它,如果您让它变得简单(首先,只有基本运算符和两个操作数),它就不会太难了
编辑:问题的bug已经修复,删除了部分答案。否
answer=expression
毫无意义。如果您打算answer=find_answer(expression)
,并且这个函数find_answer()
是您真正想知道的,如果它存在,答案仍然是“否”。C中没有内置的数学字符串解析器。您可以自己编写它,如果您让它变得简单(首先,只有基本运算符和两个操作数),它就不会太难了
编辑:问题的bug已经修复,删除了部分答案。否没有“库或内置函数”可以做到这一点。您必须构建自己的解析器和求值器。@Someprogrammerdude这实际上已经是一个答案;)<代码>scanf(“%s”、&expression)错误,因为
表达式
仅包含1个字符。使用scanf(“%99s”,表达式)代码>带有字符表达式[100]代码>1)这不是C中字符串的工作方式。2)这是无效的C。Lex(lexer生成器)和Yacc(解析器生成器)在这方面非常有用:。下面是一个使用Lex和Yacc进行算术运算的示例:不,没有“库或内置函数”可以做到这一点。您必须构建自己的解析器和求值器。@Someprogrammerdude这实际上已经是一个答案;)<代码>scanf(“%s”、&expression)
错误,因为表达式
仅包含1个字符。使用scanf(“%99s”,表达式)代码>带有字符表达式[100]代码>1)这不是C中字符串的工作方式。2)这是无效的C。Lex(lexer生成器)和Yacc(解析器生成器)在这方面非常有用:。下面是一个使用Lex和Yacc进行算术运算的示例:更简单:使用类似char表达式[1024]的数组然后用fgets(expression,1024,stdin)
(或者,不是很理想,但可能是scanf(“%1023s”,expression)
)阅读,噢,readline()
不是标准的C,只要问题没有提到可用的实现,这需要一个免责声明:)@FelixPalmen谢谢:)在我随附的教学大纲书中,声明代码的语法是这样的,代码在Turbo中编译得很好。那么,它是更好的代码还是标准的改变?@阿纳尔TurbuTubgLKRAGSET Turbo C++是Borland International在1991年发布的DOS的C/C++编译器:使用数组如<代码>字符表达式[1024 ];然后用fgets(expression,1024,stdin)
(或者,不是很理想,但可能是scanf(“%1023s”,expression)
)阅读,噢,readline()
不是标准的C,只要问题没有提到可用的实现,这需要一个免责声明:)@FelixPalmen谢谢:)在我随附的教学大纲书中,声明代码的语法是这样的,代码在Turbo中编译得很好。那么,它是更好的代码还是在标准中的变化?@ HabSpTeTaTuBug LKRAGSET Turbo C++是Borland International在1991发布的DOS的C/C++编译器。