• PTA 符号配对 —— C++


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

     思路:首先,个人认为,这道题用栈是实现不了的。下图 AC 代码运行出来的结果,难道不应该是 {-? 吗???

     然后就是我个人的思路,声明一个足够长的 char 数组 data ,按出现的先后顺序来存储 /* */( )]{ } 这些符号,遇到其他符号,直接跳过

    例如 void ( { ]

    void 和空格直接跳过,

    data[5] 存储 '(';

    data[7] 存储 '{';

    注意,第 10 位为右半部分符号 ‘]’,此时从第 9 位,倒序遍历 data ,若出现与之对应的左半部分符号,将左半部分符号删除,即 data[i]=NULL;若未出现,将右半部分符号存入第 10 位,以此方法,直到将输入语句遍历 

    最后从头遍历 data 直到出现第一个不为 NULL 的数据,输出与之相对的部分,若 data 全为空输出 “YES”

    代码

    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    vector<char> v;
    int main(){
        string tem;
        char data[105] = { NULL };
        int i, j;
        while (getline(cin,tem)&&tem!="."){
            for (i = 0; i < tem.size(); i++)
                v.push_back(tem[i]);
        }
        for (i = 0; i < v.size(); i++) {
            if (v[i] == '('|| v[i] == '['|| v[i] == '{') 
                data[i] = v[i];
            else  if ((i+1)<v.size()&&v[i] == '/'&&v[i + 1] == '*'){
                data[i] = v[i];
                i++;
            }
            else if ((i + 1) < v.size() && v[i] == '*'&&v[i + 1] == '/') {
                for (j = i - 1; j >= 0; j--) {
                    if (data[j] == '/') {
                        data[j] = NULL;
                        break;
                    }
                }
                if(j==-1)
                    data[i] = v[i];
                i++;
            }
            else if (v[i] == '}') {
                for (j = i - 1; j >= 0; j--) {
                    if (data[j] == '{') {
                        data[j] = NULL;
                        break;
                    }
                }
                if (j == -1)
                    data[i] = v[i];
            }
            else if (v[i] == ']') {
                for (j = i - 1; j >= 0; j--) {
                    if (data[j] == '[') {
                        data[j] = NULL;
                        break;
                    }
                }
                if (j == -1)
                    data[i] = v[i];
            }
            else if (v[i] == ')') {
                for (j = i - 1; j >= 0; j--) {
                    if (data[j] == '(') {
                        data[j] = NULL;
                        break;
                    }
                }
                if (j == -1)
                    data[i] = v[i];
            }
        }
        for (i = 0; i < 105; i++) {
            if (data[i] != NULL) {
                cout << "NO" << endl;
                if (data[i] == '/')
                    cout << "/*-?" << endl;
                else if (data[i] == '{')
                    cout << "{-?" << endl;
                else if (data[i] == '[')
                    cout << "[-?" << endl;
                else if (data[i] == '(')
                    cout << "(-?" << endl;
                else if (data[i] == '*')
                    cout << "?-*/" << endl;
                else if (data[i] == '}')
                    cout << "?-}" << endl;
                else if (data[i] == ']')
                    cout << "?-]" << endl;
                else if (data[i] == ')')
                    cout << "?-)" << endl;
                break;
            }
        }
        if (i==105)
            cout << "YES" << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    初始化Winsock库
    memset与初始化
    老板不在,嚣张的正则
    教研室的下午,取快递的一天
    教研室的夜晚
    真不知道起什么名字了
    任性就是没长大咯
    难得起得早,难得周六上班
    工欲学其语,必先装软件
    151008-JS初级完成,PHP入门(变量常量等)-没假放了
  • 原文地址:https://www.cnblogs.com/bjxqmy/p/11600783.html
Copyright © 2020-2023  润新知