重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

C语言中有eval函数吗 c++eval

帮我写一个c语言计算器

#include stdio.h

成都创新互联从2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、网站制作网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元二七做网站,已为上家服务,为二七各地企业和个人服务,联系电话:028-86922220

#include stdlib.h

#include string.h

int errorflag;

typedef struct

{

double array[100];

int top;

}stack;

int isNumeric(char s) // 判断是不是数字

{

if(s='0's='告丛9' || s=='.')

return 1;

return 0;

}

int empty(stack* s) // 判断stack是不是为空

{

return s-top == 0;

}

void init(stack *s) // 初始化 stack

{

s-top = 0;

}

void push(stack* s, double a) // 入stack

{

s-array[s-top++] = a;

}

double pop(stack* s) // 出stack

{

if(!empty(s))

return s-array[--s-top];

}

double eval(char* s, char* e) // 解析算式

{

stack t;

double temp,temp2;

char *p, *q, *r;

int flag;

char op = '+';

init(t);

push(t,0);

while(se *s==' ') s++; // 清空前导 0

while(se *(e-1)==' ') e--; // 清空后导 0

if(s==e) return 0; // 空串 返回 0

p = s;

q = e;

for(;!errorflagpq;p++) // 历遍整个串

{

if(*p == ' ') continue; // 无视空格

else if(*p=='+' || *p == '-' || *p == '*' || *p == '/')

{

op = *p; // 更换操作纳早符

continue;

}

else

{

if(*p == '(') // 遇到左括号

{

r = p+1;

flag = 1;

while(flag)

{

p++;

if(p=e)

{

printf("\nError: ( and ) not matched.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

if(*p=='(')

flag++;

if(*p==')') // 找到匹配的右括号

flag--;

}

temp = eval(r,p); // 括号内调用eval函数得到值

}

else if( *p == ')' )

{

printf("\nError: ( and ) not matched.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

else if(isNumeric(*p)) // 如果是简单数字

{

sscanf(p,"%lf",temp); // 利用sscanf扫入数字

while(isNumeric(*p)) p++; // 指针偏移

p--;

}

else

{

printf("袜茄樱\nError: character not recognized.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

if(op=='+') // 根据操作符入stack

push(t,temp);

else if(op=='-')

push(t,-temp);

else if(op=='*')

{

temp2 = pop(t);

temp2 *= temp;

push(t,temp2);

}

else if(op=='/')

{

if(temp == 0)

{

printf("\nError: divided by zero.\n");

errorflag = 1;

q = s;

while(qe)

{

putchar(*q);

q++;

}

putchar(10);

q = s;

while(q p)

{

putchar(' ');

q++;

}

printf("^\n");

break;

}

temp2 = pop(t);

temp2 /= temp;

push(t,temp2);

}

}

}

if(errorflag)

{

return -1;

}

temp = 0;

while(!empty(t)) // 统计stack内所有数之和

{

temp2 = pop(t);

temp += temp2;

}

return temp; // 返回总和

}

int main()

{

char s[1000];

int len;

double result;

while(gets(s))

{

errorflag = 0;

len = strlen(s);

result = eval(s,s+len);

if(!errorflag)

printf("%lf\n",result);

}

}


分享名称:C语言中有eval函数吗 c++eval
文章地址:http://cqcxhl.com/article/dspgiop.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP