Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中使用字符串作为数学表达式_C_String - Fatal编程技术网

在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++编译器。