当前位置:编程学习 > C/C++ >>

字符串四则运算的实现

题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。
说明: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);
}


补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,