求字符串算式的值

/*简单四则运算
问题描述: 
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注: 1、表达式只含 +, -, *, / 四则运算符,不含括号
2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况
3、要考虑加减乘除按通常四则运算规定的计算优先级
4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生
5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况
   要求实现函数:
int calculate(int len, char *expStr)
【输入】 int len : 字符串长度;
char *expStr : 表达式字符串;
【输出】 无
【返回】 计算结果
示例
1) 输入:char *expStr = “1 + 4 * 5 - 8 / 3”    函数返回:19
2) 输入:char *expStr = “8 / 3 * 3”     函数返回:6
简化版的四则运算:没有括号,只有加减乘除四种运算*/

#include<iostream>
#include<cctype>
using namespace std;
int calculate(int len, char *expStr);
int main()
{
char m[] ="8/4*5-8-3/8-4";//+:43,*:42,-:45,/:47
cout << m << " = "<<calculate(strlen(m), m);
return 0;
}
int calculate(int len, char *expStr)
{
int m=len;
//int * num = new int[] ;
//int * sig = new int[];
//int *result = new int;
//result = { 0 };
int num[10] = {0};
int sig[10] = { 0 };
int result[10] = { 0 };
int j = 0, k = 0,a=0;
for (int i = 0; i < len; ++i)
{
if (isdigit(expStr[i]))
num[j++] = expStr[i]-'0';//求字符数字的十进制数字值,如’6‘=54,而’0‘=48
//所以’6‘-’0‘=6;
else sig[k++] = expStr[i];
}
for ( a = 0; a <= k-1 ; ++a)//+:43,*:42,-:45,/:47
{
//a = i;
if ('*' == sig[a])
{
num[a] = num[a] * num[a + 1];
for (int i = a; i < k - 1; ++i)
{
sig[i] = sig[i + 1];
//a = - 1;
}
sig[k - 1] = 0;
for (int i = a+1; i <=k - 1; ++i)
{
num[i] = num[i + 1];
}
num[k] = 0;
a = -1;//如果有运算,则从最先的开始,因为进入下一个循环要加一,所以这里设置为-1
}
if ('/' == sig[a])
{
num[a] = num[a] / num[a + 1];
for (int i = a; i < k - 1; ++i)
{
sig[i] = sig[i + 1];
//a = - 1;
}
sig[k - 1] = 0;
for (int i = a + 1; i <= k - 1; ++i)
{
num[i] = num[i + 1];
}
num[k] = 0;
a = -1;
}
}

for ( a = 0; a <= k-1 ; ++a)
{
if ('+' == sig[a])
{
num[a] = num[a] + num[a + 1];
for (int i = a; i < k - 1; ++i)
{
sig[i] = sig[i + 1];

}
sig[k - 1] = 0;
for (int i = a + 1; i <= k - 1; ++i)
{
num[i] = num[i + 1];
}
num[k] = 0;
a = -1;
}
if ('-' == sig[a])
{
num[a] = num[a] - num[a + 1];
for (int i = a; i < k - 1; ++i)
{
sig[i] = sig[i + 1];
//a = -1;
}
sig[k - 1] = 0;
for (int i = a + 1; i <= k - 1; ++i)
{
num[i] = num[i + 1];
}
num[k] = 0;
a = -1;
}
}
return num[0];
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值