| 部分 | 描述 |
|---|---|
| Test | 任何表达式,只包含问号(“?”),冒号(“:”)和数字。 |
| statement1 | 当 test 是 非0 时执行的语句。 |
| statement2 | 当 test 是 0 时执行的语句。 |
数据输入输出
输入样例
1?2:3?4:5
输出样例
2
- //条件表达式求值
- #include<iostream>
- #include<stack>
- #include<vector>
- #include<stdio.h>
- #include<string>
- using namespace std;
- int main()
- {
- string str;
- int i;long int a,b,c;
- cin>>str;
- while(!cin.eof())
- {
- stack<long int> L;
- for(i=str.size()-1;i>=0;i--)
- {
- a=0;
- int flag=0;
- string s;
- while(str[i]>='0'&&str[i]<='9')
- {
- flag=1;
- s+=str[i];
- --i;
- }
- if(flag==1)
- {
- for(int j=s.size()-1;j>=0;j--)//转换成正确的值,否则a将是逆值,如:24会变成42
- a=a*10+s[j]-48; //因为这边是逆序扫描
- L.push(a);
- flag=0;
- }
- while(str[i]=='?')
- {
- --i;
- if(i<0)
- break;
- b=0;
- while(str[i]>='0'&&str[i]<='9')
- {
- b=b*10+str[i]-48;
- --i;
- }
- if(b)//b非零时
- {
- c=L.top();
- L.pop();
- L.pop();
- L.push(c);
- }
- else
- L.pop();
- }
- if(i<0)
- break;
- }
- cout<<L.top()<<endl;
- L.pop();//清栈
- cin>>str;
- }
- return 0;
- }
本文介绍了一种使用栈来解析并计算复杂的三元运算符表达式的方法。通过逆序扫描字符串,利用栈来存储数字,并根据运算符进行计算,从而得到最终结果。

被折叠的 条评论
为什么被折叠?



