这一题可以说是字符串的模拟题,而在当时思路没有很清晰的情况下,就马上开始敲键盘了,只是认为这一题不难,应该很快就可以解出来的,但是在编码过程中遇到了不少问题,这些问题直接影响了思维,加之现场的压力,后来就越来越乱了,呼呼。。以后要注意一定要思路清晰,在纸上可以模拟下问题的解决思路,必须的透彻,这是很重要的!
  问题描述如下:
    一开始给定一些变量以及相对应的值,以%%%结尾,最后给出一些表达式的值,然我们求表达式的值是多少,形式如:
    aa = 34
    bb = 45
    cc = 56
    %%%
    aa + bb * cc
    aa + bb - cc
-------------------------------------------------------------------------------------------------------------------
 1#include<iostream>
 2#include<sstream>
 3#include<string>
 4#include<iterator>
 5#include<map>
 6#include<vector>
 7using namespace std;
 8string input;
 9map<string,int> my;
10map<char,int> f;
11vector<int> num;
12vector<int> op;
13void init()
14{
15 f['+']=1;
16 f['-']=2;
17 f['*']=3;
18 f['/']=4;
19}

20string predeal(string s)
21{
22  int len=s.size();
23  for(int i=0;i<len;i++)
24     if(s[i]=='=')
25      s[i]=' ';
26  return s;
27}
 
28string prevdeal2(string s)
29{
30  int len=s.size();
31  for(int i=0;i<len;i++)
32   if(!isalnum(s[i])&&s[i]!=' ')  //如果不是字符且不是空格
33    {
34      s[i]=f[s[i]]+'0';
35    }
 
36  return s;
37}

38int main()
39{
40    string s;
41    while(getline(cin,s)&&s!="%%%")
42    {
43      //strlwr((char *)s.c_str());
44      input=predeal(s);
45      istringstream in(input);
46      string op1; //操作数1 
47      int num1;   //数值
48      in>>op1>>num1;
49      my[op1]=num1; 
50    }

51    map<string,int>::iterator it;
52   init();
53   while(getline(cin,s))
54   {
55     num.clear();
56     op.clear();
57     string deal=prevdeal2(s);
58     string ans;
59     int len=s.size();
60     istringstream in(deal);
61     in>>ans;
62     num.push_back(my[ans]);  
63     //接着再读入一个字符和字符串 
64     int op1;
65     string ans2;
66     while(in>>op1>>ans2)
67     {
68       if(op1==3)
69       {
70         num.back()*=my[ans2];
71       }

72       else if(op1==4)
73       {
74         num.back()*=my[ans2];
75       }
 
76       else if(op1==1||op1==2)
77       {
78         op.push_back(op1);
79         num.push_back(my[ans2]); 
80       }

81     }

82     int res=num[0];
83     for(int i=0;i<op.size();i++)
84     {
85      if(op[i]==1)
86      {
87       res+=num[i+1]; 
88      }

89      else if(op[i]==2)
90      {
91       res-=num[i+1];
92      }

93     }

94     cout<<"the ans is: "<<res<<endl; 
95   }

96    system("pause");
97}

98