一个小的计算器的实现

在假期间我写了一个用于计算表达式的C++类,终于明白了计算器的基本工作原理。以下是相关的代码,共有三个文件,分别是源文件,头文件和栈模板类头文件。
//Expression.cpp
#include "Expression.h"
#include 
#include 
using namespace std;
#define InitError \
	this->error=new string[error]; \
	this->error[0]="Error 0:A Number Divided By Zero."; \
	this->error[1]="Error 1:Null Value."; \
	this->error[2]="Error 2:Unknown Char.";	\
	this->error[3]="Error 3:Symbol After Symbol."; \
	this->error[4]="Error 4:\'.\' After \'.\'";
Expression::Expression(int max,char depart,int error)
:stack(max),num(max),depart(depart)
{
	InitError
}
Expression::~Expression()
{
	if(error)
		delete [] error;
}
Expression::Expression(string str,int max,char depart,int error)
:stack(max),num(max),depart(depart),str(str)
{
	InitError
}
#undef InitError
void Expression::ReadString(string str)
{
	this->str=str;
}
void Expression::Reset(int max)
{
	stack.Reset(max);
	stack.Clear();
	num.Reset(max);
	num.Clear();
}
inline bool Expression::Issymbol(char ch)//是否为运算符号
{
	return ch=='*'||ch=='/'||ch=='^'||ch=='+'||ch=='-';
}
inline bool Expression::Isnum(char ch)//是否为数字或者小数点
{
	return (ch>='0'&&ch<='9')||ch=='.';
}
inline bool Expression::Over(char ch1,char ch2)//运算符的优先级的判断
{
	if(ch1=='(')
		if(ch2=='(')
			return false;
		else
			return true;
	if(ch1=='^')
		if(ch2=='^')
			return false;
		else
			return true;
	if(ch1=='*'||ch1=='/')
		if(ch2=='+'||ch2=='-')
			return true;
	return false;
}
double Expression::Caculate1()//result保存了后缀表达式的值
{
	try
	{
		PreRead();
	}
	catch(string e)
	{
		throw(e);
	}
	result=0;
	behind="";
	int max=str.length();
	stack.Clear();
	for(int i=0;i
//Expression.h
#ifndef _Expression_h_
#define _Expression_h_
#define _stack_max_ 10	//这里规定了递归的深度,太小程序会出现内存错误
						//太大会浪费较多内存
#include 
#include 
using namespace std;
#include "stack.h"
class Expression
{
public:
	Expression(int max=_stack_max_,char depart='#',int error=5);
	Expression(string str,int max=_stack_max_,char depart='#',int error=5);
	virtual ~Expression();
	void ReadString(string str);
	void Reset(int max);
	double Caculate1();
	double GetResult();
	string GetBehind();
protected:
	virtual void LoadSymbol();//此函数必须在子类中重写
	virtual void PreRead();//此函数可以不用在子类中重写
	inline virtual bool Issymbol(char ch);//这里应与LadSymbol()中的符号对应
	inline bool Over(char ch1,char ch2);
	inline bool Isnum(char ch);
	inline double StrToDouble(string str);
	char depart;
	string str;
	string behind;
	string *error;
	double result;
	CStack stack;
	CStack num;
};
#endif
//stack.h
#ifndef _Stack_h_
#define _Stack_h_
template
class CStack
{
public:
	CStack(int max);
	CStack(CStack &temp);
	~CStack();
	bool IsEmpty();
	bool IsFull();
	bool Push(T temp);
	T& Popup();
	T Top();
	void Clear();
	void Reset(int max);
	int GetMax();
private:
	int max;
	int top;
	T* stack;
};

template
CStack::CStack(int max)
{
	this->max=max;
	top=-1;
	stack=new T[max];
}
template
CStack::CStack(CStack &temp):max(temp.max),top(temp.top)
{
	stack=new T[max];
	for(int i=0;i<=top;i++)
		stack[i]=temp.stack[i];
}
template
CStack::~CStack()
{
	if(stack)
		delete [] stack;
}
template
bool CStack::IsEmpty()
{
	return (top<0||top>=max);
}
template
bool CStack::IsFull()
{
	return top==max-1;
}
template
bool CStack::Push(T temp)
{
	if(IsFull())
		return false;
	stack[++top]=temp;
	return true;
}
template
T& CStack::Popup()
{
	return stack[top--];
}
template
void CStack::Clear()
{
	top=-1;
}
template
void CStack::Reset(int max)
{
	if(this->max>=max)
		return;
	T* temp=new T[max];
	for(int i=0;i<=top;i++)
		temp[i]=stack[i];
	this->max=max;
	delete [] stack;
	stack=temp;
}
template
T CStack::Top()
{
	return stack[top];
}
template
int CStack::GetMax()
{
	return max;
}
#endif


内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值