栈的应用

/*Description
检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ].
 Input:
         第一行是一整数,即测试样例个数n.
          以下n行,每一行是一个长度不超过100个字符的字符串。
 Output:
         第一行是一整数,即测试样例个数n.
         以下n行,每一行是一个长度不超过100的字符串。
Sample Input:
                 3
                 a
                 2-[(1+2)*2]
                 (a+b])
Sample Output:
                Yes
                Yes
                No
*/
#include<iostream>
#include<stack>
#include<string>
using namespace std;
int main()
{
    int n;  
    cin>>n;
   for(int i=0;i<n;i++)
   {  
        stack<char> my;
        string s;
        int flag=0;
        cin>>s;
        int len=s.length();
        for(int j=0;j<len;j++)
        {
            if(s[j]=='('||s[j]=='['||s[j]=='{')
                my.push(s[j]);
            if(s[j]==')')
            {
                if(my.empty()||my.top()!='(')
            	 {
                    flag=1;
                    cout<<"No"<<endl; 
                    break;     
                 }
                 else
                 my.pop();
            }  
            if(s[j]==']')
            {
            	if(my.empty()||my.top()!='[')
            	 {
                     flag=1;
                     cout<<"No"<<endl; 
                     break;     
                 }
                else
                   my.pop();
            }  
            if(s[j]=='}')
            {
                 if(my.empty()||my.top()!='{')
            	 {
                     flag=1;
                     cout<<"No"<<endl; //只有右括号或者括号不匹配 
                     break;     
                 }
                 else
                     my.pop();
            }  
       }
      if(!my.empty()&&flag==0)//针对"只有左括号"的时候 
           cout<<"No"<<endl;
          if(my.empty()&&flag==0) //针对"没有任何括号的时候"并且falg==0保证了不多输出"No" 
             cout<<"Yes"<<endl;
    }
 }                                 

2.后缀表达式算

/*后缀表达式计算 

Input
     第一行是一整数,即测试样例个数T.
     以下T行,每一行是一个长度不超过100的字符串,代表一条后缀表达式。
     表达式中只含有+、-、*、/四种运算符和26个小写英文字母,不含其它字符。每一个英文字母代表一个正整数:
     a = 1,b = 2,c = 3...y = 25,z = 26。
Output
    每一个输入样例,单独一行输出结果:后缀表达式的值,一个正实数S,保留两位小数。 
Sample Input:
                2
               ab+c*
               int**py++
Sample Output:
              9.00
              2561.00
*/
#include<iostream>
#include<stack>
#include<string>
#include <iomanip>
using namespace std;
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		stack<double> my;
		double p,q;
		string s;
		cin>>s;
		int len=s.length();
		for(int j=0;j<len;j++)
		{
			if(s[j]>='a'&&s[j]<='z')
				my.push((s[j]-'a'+1));
			if(s[j]=='+')
			{
				p=my.top();
				my.pop();
				q=my.top();
				my.pop();
				my.push((p+q)); 
			}
			if(s[j]=='-')
			{
				p=my.top();
				my.pop();
				q=my.top();
				my.pop();
				my.push((q-p)); 
			}
			if(s[j]=='*')
			{
				p=my.top();
				my.pop();
				q=my.top();
				my.pop();
				my.push((p*q)); 
			}
			if(s[j]=='/')
			{
				p=my.top();
				my.pop();
				q=my.top();
				my.pop();
				my.push((q/p)); 
			}
		}
		cout<<fixed<<setprecision(2)<<my.top()<<endl;
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值