您的位置:首页 > 职场人生

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

2013-09-06 21:52 267 查看
题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。

说明: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=='/')
{
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";
int res = calculate(strlen(str), str);
printf("result: %d\n", res);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: