习题3.8 符号配对(20 分) 浙大版《数据结构(第2版)》题目集

Posted 给杰瑞一块奶酪~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了习题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]=‘\0‘;
//    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]<<"-?";
        }
    }
}

 

以上是关于习题3.8 符号配对(20 分) 浙大版《数据结构(第2版)》题目集的主要内容,如果未能解决你的问题,请参考以下文章

习题3.12 另类循环队列(20 分)浙大版《数据结构(第2版)》题目集

习题2.3 数列求和-加强版(20 分)浙大版《数据结构(第2版)》题目集

习题2.2 数组循环左移(20 分)浙大版《数据结构(第2版)》题目集

习题2.8 输出全排列(20 分)浙大版《数据结构(第2版)》题目集

习题3.4 最长连续递增子序列(20 分)浙大版《数据结构(第2版)》题目集

习题2.1 简单计算器(20 分)浙大版《数据结构(第2版)》题目集