這一題可以說是字符串的模擬題,而在當時思路沒有很清晰的情況下,就馬上開始敲鍵盤了,只是認為這一題不難,應該很快就可以解出來的,但是在編碼過程中遇到了不少問題,這些問題直接影響了思維,加之現場的壓力,后來就越來越亂了,呼呼。。以后要注意一定要思路清晰,在紙上可以模擬下問題的解決思路,必須的透徹,這是很重要的!
  問題描述如下:
    一開始給定一些變量以及相對應的值,以%%%結尾,最后給出一些表達式的值,然我們求表達式的值是多少,形式如:
    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