1086: 勤奋的计算机系学生

题意:判断所输入数据中括号是否正确匹配

解题思路:用数组模拟栈实现括号的匹配。

前期处理:字符数组第一个元素赋值0,数组长度赋值1。

1.不停读入字符,判断其是否为左括或右括。

2.1.若为左括,压入栈。

2.2.若为右括,判断栈顶元素是否为与之匹配的左括。若是,数组长度减1;若否,将该右括压入栈。

3.若读到#,判断数组长度是否为1然后进行相应输出。

4.若读到@,先判断、输出后结束程序。

#include<cstdio>
int main()
{
    int len = 1;//用来记录数组长度的len
    char t, in[256] = {0};//用来读取字符的字符变量t和储存括号的字符数组in
    while (scanf ("%c", &t) != EOF)
    {
        if (t == 40 || t == 91 || t == 123)//若为左括压入栈
            in[len++] = t;//压入栈后数组长度自增一
        if (t == 41 && in[len - 1] == 40 || t == 93 && in[len - 1] == 91 || t == 125 && in[len - 1] == 123)//若为右括且匹配则数组长度减一
            len--;
        else if (t == 41 || t == 93 || t == 125)//若为右括且不匹配则压入栈
            in[len++] = t;//压入栈后数组长度自增一
        if (t == 35 || t == 64)//若为@或#则判断并输出
        {
            if (len == 1)
                printf ("Wonderful\n");
            else
                printf ("Be Careful\n");
            len = 1;
        }
        if (t == 64)//若为@则结束程序
            return 0;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值