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 }