zoukankan      html  css  js  c++  java
  • 习题3.8 符号配对(20 分) 浙大版《数据结构(第2版)》题目集

    请编写程序检查C语言源程序中下列符号是否配对:/**/()[]{}

    输入格式:

    输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。

    输出格式:

    首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-?

    输入样例1:

    void test()
    {
        int i, A[10];
        for (i=0; i<10; i++) /*/
            A[i] = i;
    }
    .
    

    输出样例1:

    NO
    /*-?
    

    输入样例2:

    void test()
    {
        int i, A[10];
        for (i=0; i<10; i++) /**/
            A[i] = i;
    }]
    .
    

    输出样例2:

    NO
    ?-]
    

    输入样例3:

    void test()
    {
        int i
        double A[10];
        for (i=0; i<10; i++) /**/
            A[i] = 0.1*i;
    }
    .
    

    输出样例3:

    YES
    


    /**/的判断在作祟,搞得我总是最后一个测试点错误,再读入的时候用<>代替了,方便判断了,就对了。

    #include <iostream>
    #include <map>
    #include <algorithm>
    #include <stack>
    #define eof "."
    using namespace std;
    
    int main()
    {
        string s;
        char a[101],b[101];
        int d = 0,c = 0;
        int flag = 1;
        map<char,char> q;
        q['('] = ')';
        q['{'] = '}';
        q['['] = ']';
        q['<'] = '>';
        while(cin>>s&&s != eof)
        {
            for(int j = 0;j < s.size();j ++)
            {
                if(s[j] == '[' || s[j] == ']' || s[j] == '{' || s[j] == '}' || s[j] == '(' || s[j] == ')')a[d ++] = s[j];
                else if(s[j] == '/' && s[j+1] == '*')a[d ++] = '<',j ++;
                else if(s[j] == '*' && s[j+1] == '/')a[d ++] = '>',j ++;
            }
        }
        int j;
    //    a[d]='';
    //    cout<<a<<endl;
        for(j = 0;j < d;j ++)
        {
            if(a[j] == '(' || a[j] == '[' || a[j] == '{' || a[j] == '<')
            {
                b[c ++] = a[j];
            }
            else if(c&&q[b[c-1]] == a[j])c --;
            else
            {
                flag = 0;
                cout<<"NO"<<endl;
                if(!c)
                {
                    if(a[j]=='>')cout<<"?-*/";
                    else cout<<"?-"<<a[j];
                }
                else
                {
                    if(b[c - 1] == '<')cout<<"/*-?";
                    else
                    cout<<b[c - 1]<<"-?";
                }
                break;
            }
        }
        if(flag)
        {
            if(!c)cout<<"YES"<<endl;
            else
            {
                cout<<"NO"<<endl;
                if(b[c - 1] == '<')cout<<"/*-?";
                else
                cout<<b[c - 1]<<"-?";
            }
        }
    }
  • 相关阅读:
    MySQL数据库06 /数据库总结
    数据库05 /索引、数据库备份、锁和事务、慢查询优化、索引命中相关
    数据库04 /多表查询、pymysql模块
    数据库03 /库、表、记录的详细操作、单表查询
    struts基于ognl的自动类型转换需要注意的地方
    struts-json-plugin result中配置对象的序列化
    hibernate关联关系笔记
    使用动态代理实现数据库事务(转)
    xml、文件操作功能类
    将CachedRowSet中的数据转储到对象中
  • 原文地址:https://www.cnblogs.com/8023spz/p/7624486.html
Copyright © 2011-2022 走看看