标签:code top transform data form nsf cas oid str
1 #include<iostream> 2 #include<string> 3 #include<stack> 4 using namespace std; 5 6 void TransformExpr(char *oldexpr,char *newexpr) 7 { 8 stack<char> s; 9 int i=0; 10 int j=0; 11 while(oldexpr[i] != ‘\0‘) 12 { 13 switch(oldexpr[i]) 14 { 15 case ‘(‘ : 16 s.push(oldexpr[i++]); 17 break; 18 case ‘+‘: 19 case ‘-‘: 20 while(s.size()>0 && s.top() != ‘(‘) 21 { 22 newexpr[j++] = s.top(); 23 s.pop(); 24 } 25 s.push(oldexpr[i++]); 26 break; 27 case ‘*‘: 28 case ‘/‘: 29 while(s.size()>0 && s.top() != ‘(‘ && (s.top() == ‘*‘ || s.top() == ‘/‘)) 30 { 31 newexpr[j++] = s.top(); 32 s.pop(); 33 } 34 s.push(oldexpr[i++]); 35 break; 36 case ‘)‘: 37 while(!s.empty()) 38 { 39 char temp = s.top(); 40 s.pop(); 41 if(temp != ‘(‘) 42 { 43 newexpr[j++] = temp; 44 } 45 else 46 { 47 ++i; 48 break; 49 } 50 ) 51 break; 52 53 case ‘ ‘: 54 ++i; 55 break; 56 default : 57 while(oldexpr[i] >= ‘0‘ && oldexpr[i] <= ‘9‘) 58 { 59 newexpr[j++] = oldexpr[i]; 60 ++i; 61 } 62 newexpr[j++] = ‘#‘; 63 break; 64 } 65 ) 66 while(!s.empty()) 67 { 68 newexpr[j++] = s.top(); 69 s.pop(); 70 } 71 newexpr[j] = ‘\0‘; 72 ) 73 74 int Calculate(char *expr) 75 { 76 int i=0; 77 stack<int> data; 78 int tmp; 79 while(expr[i] != ‘\0‘) 80 { 81 tmp = 0; 82 if(expr[i] >= ‘0‘ && expr[i] <= ‘9‘) 83 { 84 while(expr[i] >= ‘0‘ && expr[i]<=‘9‘) 85 { 86 tmp = tmp * 10 + expr[i++] - ‘0‘; 87 } 88 data.push(tmp); 89 } 90 else if(expr[i] == ‘#‘) 91 ++i; 92 else 93 { 94 int a,b; 95 a= data.top(); 96 data.pop(); 97 b= data.top(); 98 data.pop(); 99 switch(expr[i++]) 100 { 101 case ‘+‘: 102 tmp = b+a; 103 data.push(tmp); 104 break; 105 case ‘-‘: 106 tmp = b-a; 107 data.push(tmp); 108 break; 109 case ‘*‘: 110 tmp = a*b; 111 data.push(tmp); 112 break; 113 case ‘/‘: 114 tmp = b/a; 115 data.push(tmp); 116 break; 117 } 118 } 119 } 120 return data.top(); 121 }
标签:code top transform data form nsf cas oid str
原文地址:https://www.cnblogs.com/susidian/p/10013232.html