POJ 1539 Evaluating Simple C Expressions G++

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
#include <cstring>
using namespace std;
//英语     看博友分析   模拟   
int qz[100];//前缀
int hz[100];//后缀 
int cx[100];
int main()
{
	while(1)
	{
		memset(qz,0,sizeof(qz));
		memset(hz,0,sizeof(hz));
		memset(cx,0,sizeof(cx));
		string s;
		getline(cin,s);
		if(cin.eof()==1)
		{
			break;
		}
		string st="";
		for(int i=0;i<s.size();i++)
		{
			if(s[i]!=' ')
			{
				st=st+s[i];
			}
		}
		//cout<<st<<endl;
		string t="";
		for(int i=st.size()-1;i>=0;i--)//前缀
		{
			string kong="";
			string tt=kong+st[i];
			t=tt+t;
			if(st[i]>='a'&& st[i]<='z'&&(i-2)>=0)
			{
				if(st[i-1]=='-'&& st[i-2]=='-')
				{
					qz[st[i]-'a']=-1;
					i=i-2;
				}else if(st[i-1]=='+'&& st[i-2]=='+')
				{
					qz[st[i]-'a']=1;
					i=i-2;					
				}
			} 
		}	
		st=t;
		//cout<<st<<endl;
		t="";
		for(int i=0;i<st.size();i++)//后缀 
		{
			t=t+st[i];
			if(st[i]>='a'&& st[i]<='z')
			{
				if(st[i+1]=='-'&& st[i+2]=='-')
				{
					hz[st[i]-'a']=-1;
					i=i+2;
				}else if(st[i+1]=='+'&& st[i+2]=='+')
				{
					hz[st[i]-'a']=1;
					i=i+2;
				}
			}
		}
		st=t;
		//cout<<st<<endl;
		int fh=0;
		int jg=0;
		for(int i=0;i<st.size();i++)
		{
			if(st[i]>='a'&& st[i]<='z')
			{
				cx[st[i]-'a']=1;
				if(fh==0)
				{
					jg=jg+st[i]-'a'+1+qz[st[i]-'a'];
				}else if(fh==1)
				{
					jg=jg-(st[i]-'a'+1+qz[st[i]-'a']);
				}
			}else if(st[i]=='+')
			{
				fh=0;
			}else if(st[i]=='-')
			{
				fh=1;
			}
		}
		cout<<"Expression: "<<s<<endl;
		cout<<"    value = "<<jg<<endl;	
		for(int i=0;i<26;i++)
		{
			if(cx[i]==1)
			{
				cout<<"    "<<(char)(i+'a')<<" = "<<i+1+qz[i]+hz[i]<<endl;
			}
		}	
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值