?? simple_expression.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();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -