Uva442

https://vjudge.net/problem/UVA-442

思路:

1)当遇到左括号将字母进栈,遇到右括号将字母出栈。

2)

isalpha() 判断一个字符是否是字母

int isalpha ( int c );

标准 ASCII 编码共包含了 128 个字符,不同的字符属于不同的分类,我们在 <ctype.h> 头文件中给出了详细的列表。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 struct Matrix
 4 {
 5     int a,b;
 6     Matrix(int a=0,int b=0):a(a),b(b){}
 7 }m[26];
 8 stack<Matrix>s;
 9 int main()
10 {
11     int n;
12     cin>>n;
13     for(int i=0;i<n;i++)
14     {
15         string name;
16         cin>>name;
17         int k=name[0]-'A';
18         cin>>m[k].a>>m[k].b;
19     }
20     string expr;
21     while(cin>>expr)
22     {
23         int len=expr.length();
24         bool error=false;
25         int ans=0;
26         for(int i=0;i<len;i++)
27         {
28             if(isalpha(expr[i]))
29                 s.push(m[expr[i]-'A']);
30             else if(expr[i]==')')
31             {
32                 Matrix m1=s.top();
33                 s.pop();
34                 Matrix m2=s.top();
35                 s.pop();
36                 if(m1.a!=m2.b)
37                 {
38                     error=true;
39                     break;
40                 }
41                 ans+=m1.b*m2.a*m2.b;
42                 s.push(Matrix(m2.a,m1.b));
43             }
44         }
45         if(error)
46             cout<<"error"<<endl;
47         else
48             cout<<ans<<endl;
49     }
50     return 0;
51 }
原文地址:https://www.cnblogs.com/zuiaimiusi/p/10667901.html