zoukankan      html  css  js  c++  java
  • 面试题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=='/')
    		{
    			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
    ", res);
    }
    


  • 相关阅读:
    Javascript获取本周,本月,本季,本年,上月,上周,上季,去年,上二周,上二月
    SQL SERVER 2008 评估期已过的解决办法
    习惯那些“小事”
    Oracle 测试语句
    整理js常用按键相关代码
    .NET 学习笔记
    lamda表达式学习
    使用Html.DropDownList
    ibatis
    MyBatis
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3306329.html
Copyright © 2011-2022 走看看