這一題可以說是字符串的模擬題,而在當時思路沒有很清晰的情況下,就馬上開始敲鍵盤了,只是認為這一題不難,應該很快就可以解出來的,但是在編碼過程中遇到了不少問題,這些問題直接影響了思維,加之現場的壓力,后來就越來越亂了,呼呼。。以后要注意一定要思路清晰,在紙上可以模擬下問題的解決思路,必須的透徹,這是很重要的!
問題描述如下:
一開始給定一些變量以及相對應的值,以%%%結尾,最后給出一些表達式的值,然我們求表達式的值是多少,形式如:
aa = 34
bb = 45
cc = 56
%%%
aa + bb * cc
aa + bb - cc
-------------------------------------------------------------------------------------------------------------------
問題描述如下:
一開始給定一些變量以及相對應的值,以%%%結尾,最后給出一些表達式的值,然我們求表達式的值是多少,形式如:
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>
7
using namespace std;
8
string input;
9
map<string,int> my;
10
map<char,int> f;
11
vector<int> num;
12
vector<int> op;
13
void init()
14
{
15
f['+']=1;
16
f['-']=2;
17
f['*']=3;
18
f['/']=4;
19
}
20
string 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
}
28
string 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
}
38
int 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
#include<iostream>2
#include<sstream>3
#include<string>4
#include<iterator>5
#include<map>6
#include<vector>7
using namespace std;8
string input;9
map<string,int> my;10
map<char,int> f;11
vector<int> num;12
vector<int> op;13
void init()14
{15
f['+']=1;16
f['-']=2;17
f['*']=3;18
f['/']=4;19
}20
string 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
} 28
string 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
}38
int 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





