用简单的C语言实现带括号的四则运算?

Python015

用简单的C语言实现带括号的四则运算?,第1张

#include<stdio.h>/*库文件包含*/

#include<string.h>/*用于字符串操作*/

#include<stdlib.h>/*用于exit函数*/

/**************************************************************************

int check(char *c)

输入参数:

char *c: 输入的字符串

返回参数:

0:字符串中有不符合规定的字符

1: 字符串字符符合规定,没有不符合规定的字符.

功能:

检查字符串中有否除了 0-9, +,-,*,/,(,),之外的其他字符,

如果有,则返回0, 表示出现错误。

若没有,则返回1,表式字符串符合规定。

**************************************************************************/

int check(char *c)

{

int k=0

while(*c!='\0')

{

if((*c>='0' &&*c<='9') || *c=='+' ||

*c=='-' || *c=='*' || *c=='/' ||

*c=='.' || *c=='(' ||  *c==')' )

{

}

else

{

printf("input error, there have the char not the math expression char!\n")

return 0

}

if(*c=='(')

k++

else if(*c==')')

k--

c++

}

if(k!=0)

{

printf("input error, there is not have correct bracket '()'!\n")

return 0

}

return 1

}

只是吐槽,不负法律责任。

对于四则运算的处理应该属于 AST算法 的一个分支,如果不构建词法分析树的话,就难以对给定串(不一定是简单的四则运算)进行优先级处理。

然而居然能够说出“不用堆栈”之类的话,看样子楼主是基本不会什么数据结构了,即使这样,还奢望能够写出四则运算处理。。

然而语言略微有些偏激了。

简而言之,处理四则运算,考虑优先级规则最简单的方法是堆栈(不考虑优先级的话从左到右扫一遍也是可以的),如果要复杂的方法也行,只是连堆栈都不想用的人,估计理解不了那些复杂方法。

最后一提,如果可以使用数据结构(如栈啊,队列啊)的话,追问可以得到源代码,否则请勿回复,并建议主动关闭问题。

#include <stdio.h>

#include "windows.h"

main()

{

char Exp[1024]={0},Oper[100]={0}

int Num[200]={0},Expi=0,Operi=0,Numi=0

boolean isnum=FALSE

printf("input a Expression:")

scanf("%s",Exp)

while(Exp[Expi]!='\0')

{

switch(Exp[Expi]) {

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

{

Num[Numi]=Num[Numi]*10+Exp[Expi]-'0'

isnum=TRUE

break

}

case '+':

case '-':

{

if(isnum) //又录入一个新数据

{

Numi++

isnum=FALSE

}

while(Operi!=0&&Oper[Operi-1]!='(')

{

if(Operi<1||Numi<2)

{

printf("Expression is error!\n")

exit(0)

}

switch(Oper[Operi-1]) {

case '+':

Num[Numi-2]=Num[Numi-2]+Num[Numi-1]

Num[Numi-1]=0

Numi--

Oper[Operi-1]='\0'

Operi--

break

case '-':

Num[Numi-2]=Num[Numi-2]-Num[Numi-1]

Num[Numi-1]=0

Numi--

Oper[Operi-1]='\0'

Operi--

break

case '*':

Num[Numi-2]=Num[Numi-2]*Num[Numi-1]

Num[Numi-1]=0

Numi--

Oper[Operi-1]='\0'

Operi--

break

case '/':

Num[Numi-2]=Num[Numi-2]/Num[Numi-1]

Num[Numi-1]=0

Numi--

Oper[Operi-1]='\0'

Operi--

break

}

}

Oper[Operi]=Exp[Expi]

Operi++

break

}