menu 小墨迹
more_vert
chevron_right 首页 » WEEK » 2-8 符号配对 (20分)
2-8 符号配对 (20分)
2020-10-16 | WEEK | 暂无评论 | 44 次阅读 | 204字

请编写程序检查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

作者
DS课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <stack>
#define CHECKBRAKETSRIGHT(braX,braS) if (brakets.empty()){cout << "NO\n?-" << braS << endl;return; }else if ( braX == brakets.top() ){ brakets.pop(); }else  if ('*' == brakets.top() ){cout <<  "NO\n/*-?" <<endl;return;}else{cout << "NO\n" << brakets.top() <<  "-?" <<endl;return;}
using namespace std;
string strInput();
void checkBrackets(string str);
int main(){
    string str = strInput();
    checkBrackets(str);
    cout;
}

void checkBrackets(string str){
    stack<char> brakets;
    for (int i = 0;i < str.length();i++ ){
        if (str[i] == '{' || str[i] == '(' || str[i] == '['  ){
            brakets.push(str[i]);
            continue;
        }
        if (str[i] == '/' && str[i + 1] == '*' ){
            brakets.push('*');
            i++;
            continue;
        }
        switch (str[i]) {
        case '}':
            CHECKBRAKETSRIGHT('{',str[i]);
            continue;
        case ')':
           CHECKBRAKETSRIGHT('(',str[i]);
            continue;
        case ']':
            CHECKBRAKETSRIGHT('[',str[i]);
            continue;
        case '*':
            if (str[i + 1] == '/'){
                 CHECKBRAKETSRIGHT('*',"*/");
                 i++;
            }
            continue;
        }
    }
    if (brakets.empty()){
        cout << "YES" <<endl;
        return;
    }
    if ('*' == brakets.top() ){cout <<  "NO\n/*-?" <<endl;return;}else{cout << "NO\n" << brakets.top() <<  "-?" <<endl;return;}
}

string strInput(){
    string getInput;
    string str;
    do {
        str.append(getInput + "\n");
        getline(cin, getInput);
    } while (getInput != ".");
    return str;
}

添加新评论
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif2016ka.gif2016bb.gif2016qiao.gif2016ll.gif2016shuai.gif2016zj.gif2016zk.gif