码迷,mamicode.com
首页 > 编程语言 > 详细

PTA 符号配对 —— C++

时间:2019-09-27 22:54:12      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:ima   输出   png   方法   color   main   顺序   语句   检查   

请编写程序检查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[6] 存储 ‘(‘;

data[8] 存储 ‘{‘;

注意,第 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;
        }
        //cout << data[i];
    }
    if (i==105)
        cout << "YES" << endl;
    system("pause");
    return 0;
}

 

PTA 符号配对 —— C++

标签:ima   输出   png   方法   color   main   顺序   语句   检查   

原文地址:https://www.cnblogs.com/bjxqmy/p/11600783.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!