⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple_expression.cpp

📁 本题要完成的是一组简单C表达的运算。所有表达式存放在文件 CExpression.txt 中
💻 CPP
字号:
#include <string>
#include "cyio.h"
class Simple_expression{
public:
	ifstream in;
	ofstream out;
	string exp;
	vector<int> tab;
	vector<char> zstack;

	vector<char> al;

	int ans;
	Simple_expression(char* inf,char* outf){
		in.open(inf);
		out.open(outf);
	}
	void run(){

		while (1){
			int i,j,k;
			tab=vector<int>(125,0);
			for (i=0;i<tab.size();i++){
				if (i>=97 || i<=122){
					tab[i]=i-96;
				}
			}
			char cp='+';
			int ncp=0;
			al=vector<char>();
			zstack=vector<char>();
			getline(in,exp);
			//cout<<exp<<endl;
			if (exp.size()==0) break;
			if (exp[0]=='-' && exp[1]!='-') {
				cout<<"error exprion!"<<endl;
				continue;
			}
			for (i=0;i<exp.size();i++){
				while (exp[i]==' ') exp.erase(exp.begin()+i);
				if ((exp[i]=='+'|| exp[i]=='-') && exp[i]==cp) {
					ncp++;
				}else{
					cp=exp[i];
					ncp=1;
				}
				if (ncp==3) {
					cout<<"error expresion!"<<endl;
					continue;
				}
				
			}

			//begin
			char l,r;
			int val,var;
			int ari=0;
			ans=0;
			for (i=0;i<exp.size();i++){
				//cout<<"["<<exp[i]<<"]"<<endl;
			//	cout<<"zstack:"<<zstack<<endl;
				if (exp[i]>=97 && exp[i]<=122){
					r=exp[i];
					al.push_back(r);
					while(zstack.size()!=0){
						char zAri=zstack[zstack.size()-1];
						zstack.pop_back();
						if (zAri=='+') tab[r]++;
						else tab[r]--;
					}
					if (ari!=0){
						if (ari=='+') ans=ans+tab[r];
						if (ari=='-') ans=ans-tab[r];
						ari=0;
					}else{
						ans=tab[r];
						
					}
				}else if(exp[i]=='+'){//    +
					if (i+1==exp.size()){
						cout<<"error exprision!"<<endl;
						break;
					}
					
					if (exp[i+1]=='+'){
						i++;
						
						if (ari==0){
							tab[r]++;
						}else{
							zstack.push_back('+');
						}
						
					}else{
						if (ari==0) {
							ari='+';
							zstack.clear();
						}else{
							cout<<"error exprision!"<<endl;
							break;
						}
					
					}
					


				}else if (exp[i]=='-'){//   -
					if (i+1==exp.size()){
						cout<<"error exprision!"<<endl;
						break;
					}
					
					if (exp[i+1]=='-'){
						i++;
					
						if (ari==0){
							tab[r]--;
						}else{
							zstack.push_back('-');
						}
						
					}else{
						if (ari==0) {
							ari='-';
							zstack.clear();
						}else{
							cout<<"error exprision!"<<endl;
							break;
						}
					
					}
				}else{
					cout<<"error exprsion!"<<endl;
					break;
				}
			}//end for 
			cout<<"Expression:"<<exp<<endl;
			out<<"Expression:"<<exp<<endl;
			cout<<"value: "<<ans<<endl;
			out<<"value: "<<ans<<endl;
			for (i=0;i<al.size();i++){
				cout<<(char)al[i]<<" = "<<tab[al[i]]<<endl;
				out<<(char)al[i]<<" = "<<tab[al[i]]<<endl;
			}
			cout<<endl;
			out<<endl;
			
			
		
		}//end while
		in.close();
	}
};
int main(){
	int i;
	for (i=0;i<128;i++){
		cout<<"i: "<<i<<"  -- "<<(char)i<<endl; 
	}
	Simple_expression se("CExpression.txt","CExpression_out.txt");
	se.run();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -