题目描述:
请使用MFC框架或者Windows API实现一个简单的计算器,主要实现以下功能:
(1)程序必须有操作UI,不能是控制台程序。
(2)计算功能包括:加、减、乘、除、求模、求余、位移运算
所有计算因子必须是可输入的,不能内置在代码里面。
1、DLL使用C++实现表达式求值,后缀表达式求值,利用两个栈来模拟实现表达式求值
此处设计DLL的类导出
/*
堆栈类,用于表达式求值
*/
#include<iostream>
#include<string>
//#include<string.h>
#include<stdlib.h>
using namespace std;
#ifndef STACK_SIZE
#define STACK_SIZE 100
#endif
#ifndef LIB_H
#define LIB_H
#ifdef DLL_FILE
class _declspec(dllexport) myStack //导出类
#else
class _declspec(dllimport) myStack //导入类
#endif
{
private:
float value[STACK_SIZE];//存放数值
int pop_v;
char sign[STACK_SIZE];//存放运算符
int pop_s;
float result;//存放表达式最终的值
public:
myStack()
{
pop_v = -1;
result = 0;
pop_s = -1;
memset(value,0,sizeof(value));
memset(sign,'\0',sizeof(sign));
}
bool push(float val);//压栈
bool push(char ch);
float pop_value();//出栈
char pop_sign();
float getPop_v();//获取栈顶元素
char getPop_s();
void divideExp(char* expression);//拆分表达式
float Calculate();
~myStack();
};
#endif
类实现:
#ifndef DLL_FILE
#define DLL_FILE
#endif
#include"lib.h"
bool myStack::push(float val)
{
if(pop_v < STACK_SIZE)
{
pop_v++;//栈顶指针加1
value[pop_v] = val;
return true;
}
return false;
}
bool myStack::push(char ch)
{
if(pop_s < STACK_SIZE)
{
pop_s++;//栈顶指针加1
sign[pop_s] = ch;
return true;
}
return false;
}
float myStack::pop_value()
{
float rt;
if(pop_v != -1 && pop_v < STACK_SIZE)
{
rt = value[pop_v];
pop_v--;//栈顶指针减1
return rt;
}
return -1;
}
char myStack::pop_sign()
{
cha