首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

面试题45:字符串四则运算的兑现

2013-09-08 
面试题45:字符串四则运算的实现题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数。说明:

面试题45:字符串四则运算的实现

题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。

说明:1. 四则运算即加减乘除"+-*/"

           2. 该表达式中的数字只能是1位(数值范围0~9)

      3.另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。

例如:若有字符串"8+7*2-9/3",计算出其值为19。

 

代码如下:

#include "stdafx.h"#include <stdio.h>#include <string.h>#include <assert.h>int cal(int nNum1, char op, int nNum2){if(op == '+') {return nNum1 + nNum2;}if(op == '-'){return nNum1 - nNum2;}if(op == '*'){return nNum1 * nNum2;}if(op == '/'){return nNum1 / nNum2;}}int calculate(int len, char *expstr){assert(expstr);if(len < 3){return -1;}char *p = expstr;int nNum1 = p[0] - '0';char op = p[1];int nNum2 = p[2] - '0';p += 3;while(*p){if(*p=='*' || *p=='/'){if(op =='*' || op=='/'){nNum1 = cal(nNum1, op, nNum2);op = *p;nNum2 = p[1] - '0';}else{nNum2 = cal(nNum2, *p, p[1]-'0');}}else{nNum1 = cal(nNum1, op, nNum2);op = *p;nNum2 = p[1] - '0';}p += 2;}return cal(nNum1, op, nNum2);}int main(){//char str[] = "1+2*3/5-6*7";//char str[] = "8+7*2-9/3";char str[] = "3/2*2+3*4";int res = calculate(strlen(str), str);printf("result: %d\n", res);}
1楼raydestiny昨天 22:39
"3/2*2"结果应该是2吧,但你的程序运行结果是0.有什么解决办法吗?
Re: htyurencaotang昨天 23:33
回复raydestinyn您好,谢谢你发现了这个问题。n解决的办法是在while循环中的if语句修改如下:nif(*p=='*' || *p=='/')ntt{ntttif(op =='*' || op=='/')nttt{nttttnNum1 = cal(nNum1, op, nNum2);nttttop = *p;nttttnNum2 = p[1] - '0';nttt}ntttelsenttt{nttttnNum2 = cal(nNum2, *p, p[1]-'0');nttt}ntt}

热点排行