精华内容
下载资源
问答
  • 符号配对

    千次阅读 2019-09-28 00:14:54
    请编写程序检查C语言源程序下列符号是否配对:/与/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的符号不超过100...

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

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

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

    我的思绪

    一开始看到这个题,就知道使用栈——因为之前了解过编译器的一些括号对齐原理。
    只不过,这道题目出的太含糊了,好多东西都没有交代清楚,容易使人走弯路,你必须像出题人期待的那个水平和想法去敲代码,否则不会通过的。就像……八股?我这么认为这道题目,太死板而且含糊了。

    1 没有明确“第一个”是什么意思。第一个不匹配的括号,啥意思?

    我的同学有敲了好几个小时的实在是过不了点,就知道想法肯定和出题人不一样,于是找了一段ac代码,运行一下发现了以下几个案例:
    {(】,按照常理来说,应该输出{(人类视角)或者】(计算机视角),但是运行结果是(。
    实际上这道题目输出的错误处,不同人会有不同的理解,所以就算有大佬来敲,可能也会摸索很长一段时间。
    那么,出题人什么意思呢?
    出题人:只要栈不为空,就给我输出弹出的那个括号不匹配。如果栈空了,在按照你碰到的应该弹出一个的括号去输出。
    对此,我只想说一句呵呵→_→ 要不是同学来找我讨论,我真的会用计算机视角做这道题目,那今天天亮之前绝对做不出来,更写不出这篇博客。

    2 没有说明一些复杂的样例不用考虑。

    第一次看到这个题目,我构思出来的测试样例中有这么一组:
    printf("((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((");
    输出什么?应该输出YES吧,没有不配对的。
    可如果这样,这道题目就复杂了,应该出现在竞赛题目上面,而不是日常的PTA里。
    我靠,这我特么到底是做还是不做?
    郁闷了几分钟,才猜着它不考虑这种情况来敲代码。

    3 我的代码

    //这次本九熬夜给你们写注释!!!
    //这次本九熬夜给你们写注释!!!
    //这次本九熬夜给你们写注释!!!

    我的思路和大部分人一样,用栈实现。
    感谢打开了C++,可以直接使用stl了。

    #include<iostream>
    #include<string>
    #include<stack>
    using namespace std;
    int main() {
    	string s;
    	char b[7];
    	b[1] = '('; b[2] = ')'; b[3] = '['; b[4] = ']'; b[5] = '{'; b[6] = '}';//用来存储括号,省掉三分之二的代码量。如果你代码超过100行了,那很有可能是因为用了6个if而不是2个。
    	int find = 0;
    	bool isasimple = false;
    	stack<char> bracket;//特地百度了一下括号的英文单词,就用他做栈名字吧。
    	while (1) {
    		getline(cin, s);
    		if (s==".") goto zoulou;//当结束时,直接“zoulou”(走咯)
    		for (int i = 0; i < s.length(); i++) {//*/是两个字符比较特殊,单独讨论
    			if (s[i] == '/' && 1 + i < s.length())
    				if (s[i + 1] == '*') {
    					bracket.push(s[i]);//我们将两个字符以/的形式保存,这样方便
    					i++;//因为这时候是两个字符
    					continue;
    				}
    			if (s[i] == '*' && 1 + i < s.length())
    				if (s[i + 1] == '/')
    				{
    					if (bracket.empty()) {
    						cout << "NO" << endl << "?-*/" << endl;
    						return 0;
    					}
    					else {
    						if (bracket.top() != '/') {
    							cout << "NO" << endl << bracket.top() << "-?" << endl;
    							return 0;
    						}
    						else {
    							bracket.pop();
    							i++;//弹栈是弹一个,但是让栈弹的却是两个字符
    							continue;
    						}
    					}
    				}
    			isasimple = false;
    			for (find = 1; find <= 6; find++) {
    				if (b[find] == s[i]) {//找一下是不是剩余的六个字符
    					isasimple = true; break;
    				}
    			}
    			if (isasimple) {
    				if (find % 2 == 1) {
    					bracket.push(s[i]);
    					continue;
    				}
    				else {
    					if (bracket.empty()) {
    						cout << "NO" << endl << "?-" << b[find] << endl;
    						return 0;
    					}
    					else {
    						if (bracket.top() == '/') {
    							cout << "NO" << endl <<"/*-?" << endl;
    							return 0;
    						}
    						else if (bracket.top() != b[find - 1]) {
    							cout << "NO" << endl << bracket.top() << "-?" << endl;
    							return 0;
    						}
    						else {
    							bracket.pop();
    							continue;
    						}
    					}
    				}
    			}
    		}
    	}
    zoulou:
    	if (bracket.empty()) {//走咯之后还没完,如果栈不是空的,也还会出错。
    		cout << "YES" << endl;
    	}
    	else {
    		cout << "NO" << endl << bracket.top() << "-?" << endl;
    	}
    	return 0;
    }
    
    
    展开全文
  • PTA 符号配对

    千次阅读 2019-02-02 00:26:19
    请编写程序检查C语言源程序下列符号是否配对:/与/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的符号不超过100个...

    符号配对 (20 分)

    请编写程序检查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<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    int main() {
    	char a[500000]= {0};
    	int stack[205]= {0};
    	int h=0;
    	while(1) {
    		cin.getline(a,500000);
    		if(strcmp(a,".")==0)
    			break;
    		int n = strlen(a);
    		int flag=0;
    		for(int i=0; i<n; i++) {
    			if(a[i] == '{' || a[i] == '(' || a[i] == '[') {
    				stack[h] = a[i];
    				h++; 
    			} else if(a[i] == '/' && i+1 < n && a[i+1] == '*') {
    				stack[h] = a[i];
    				h++;
    				stack[h] = a[i+1];
    				h++;
    				i++;
    			} else if(a[i] == '}' || a[i] == ')' || a[i] == ']') {
    				if(h == 0) {
    					printf("NO\n");
    					printf("?-%c",a[i]);
    					flag = 1;
    					return 0;
    				} else {
    					if(a[i] == '}' && stack[h-1] != '{') {
    						printf("NO\n");
    						if(stack[h-1] == '*')
    							printf("/*-?");
    						else
    							printf("%c-?",stack[h-1]);
    						flag=1;
    						return 0;
    					} else if(stack[h-1] != '(' && a[i] == ')') {
    						printf("NO\n");
    						if(stack[h-1] == '*')
    							printf("/*-?");
    						else
    							printf("%c-?",stack[h-1]);
    						flag=1;
    						return 0;
    					} else if(stack[h-1] != '[' && a[i] == ']') {
    						printf("NO\n");
    						if(stack[h-1] == '*')
    							printf("/*-?");
    						else
    							printf("%c-?",stack[h-1]);
    						flag=1;
    						return 0;
    					}
    				}
    				h--;
    			} else if(a[i] == '*' && i+1<n && a[i+1] == '/') {
    				if(h == 0) {
    					printf("NO\n");
    					printf("?-*/");
    					flag = 1;
    					return 0;
    				} else if(stack[h-1] != '*') {
    					printf("NO\n");
    					printf("%c-?",stack[h-1]);
    					flag=1;
    					return 0;
    				}
    				h=h-2;
    				i++;
    			}
    		}
    	}
    	if(h!=0) {
    		printf("NO\n");
    		if(stack[h-1] == '*')
    			printf("/*-?");
    		else
    			printf("%c-?",stack[h-1]);
    		return 0;
    	}
    	else 
    		printf("YES");
    	return 0;
    }
    
    
    展开全文
  • 6 符号配对

    千次阅读 2017-03-11 12:57:57
    请编写程序检查C语言源程序下列符号是否配对:/*与*/、(与)、[与]、{与}。 输入格式: 输入为一个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

    要注意符合c语言的规范,嗯,被坑了。以为各种括号单独自己配对了。

    实际上是全括号匹配。

    思路:

    首先就是把串全部读进来,合成一个大串,只保留括号即可。

    然后再对新生成的串处理,读入左括号,直接压入栈顶。

    如果读入的是右括号:

    1.如果栈为空,那么缺少与之对应的左括号。、

    2.如果栈顶元素与之不匹配,那么缺少与栈顶元素相匹配的右括号。

    处理完之后,如果栈为空,则表示完全匹配,如果有剩余,那么就是缺少右括号。因为是输出第一个缺少的,所以直接输出栈尾的元素就可以。

    #include <bits/stdc++.h>
    
    using namespace std;
    const int MAXN=1e5+10;
    const int inf=1e9;
    int n,m;
    int top,flag;
    char ans[MAXN];
    char s[MAXN*10];
    char sta[MAXN];
    int main()
    {
        int cnt=0;
        while(gets(s)&&s[0]!='.')
        {
            int l=strlen(s);
            for(int i=0; i<l; ++i)
            {
                if(s[i]=='('||s[i]==')'||s[i]=='{'||s[i]=='}'||s[i]=='['||s[i]==']')
                {
                    ans[cnt++]=s[i];
                }
                else if(s[i]=='/'&&s[i+1]=='*')
                {
                    ans[cnt++]='a';
                    i++;
                }
                else if(s[i]=='*'&&s[i+1]=='/')
                {
                    ans[cnt++]='b';
                    i++;
                }
            }
        }
        //puts(ans);
        top=0;
        flag=1;
        int i;
        for(i=0; i<cnt; ++i)
        {
            if(ans[i]=='('||ans[i]=='['||ans[i]=='{'||ans[i]=='a')
            {
                sta[top++]=ans[i];
            }
            else if(!top)
            {
                puts("NO");
                printf("?-");
                if(ans[i]=='b')printf("*/\n");
                else printf("%c\n",ans[i]);
                flag=0;
                break;
            }
            else if(ans[i]-sta[top-1]!=1&&ans[i]-sta[top-1]!=2)
            {
                puts("NO");
                if(sta[top-1]=='a')printf("/*");
                else printf("%c",sta[top-1]);
                printf("-?\n");
                flag=0;
                break;
            }
            else top--;
        }
        if(flag)
        {
            if(!top)puts("YES");
            else
            {
                puts("NO");
                if(sta[0]=='a')printf("/*");
                else printf("%c",sta[0]);
                printf("-?\n");
            }
        }
        return 0;
    }
    




    展开全文
  • java中对符号的数据表示法:  在计算机,有符号的数据的表示法通常分为 原码、反码和补码三种形式,所有的数据运算都是采用补码的是形式进行。  原码:最高位为符号位,“0”为正数,“1”为负数 其余位数...

    java中对有符号的数据表示法:

     在计算机中,有符号的数据的表示法通常分为 原码、反码和补码三种形式,所有的数据运算都是采用补码的是形式进行。

     原码:最高位为符号位,“0”为正数,“1”为负数 其余位数表示数值的大小;

               也就是数正数的原码的最高位是0,

               负数的原码最高位是1,其他的是数值位数

     反码:正数的反码和原码相同;

                负数的反码是对其原码逐位取反,但是符号位不算

    补码:正数的补码与其原码相同(正数的原码反码补码都是相同的)

               负数的补码是在其反码的末位加1

    展开全文
  • XML中对特殊符号的处理

    千次阅读 2008-06-20 10:12:00
    为了避免把字符数据和标记需要用到的一些特殊符号向混淆,XML还提供了一些有用的实体引用。实体引用的作用是,当在字符数据需要使用这些特殊符号时,我们采用它的实体引用来代替。这些特殊的XML实体引用包括:>...
  • 在C语言全局符号符号解析很棘手,因为相同的符号会被多个目标文件定义。在这种情况,链接器必须要么标志一个错误,要么以某种方法选出一个定义并抛弃其他定义。 在链接时,编译器输出每个全局符号给汇编...
  • 在FPGA 设计过程经常会遇到关于数表示之间的...(1)在FPGA设计过程,能够很直接的看出数字的位宽,但经常以无符号数的形式输出,在后继的处理往往要将之转化为有符号数(如:计算频谱): 对于一个比特宽度
  • 判断字符串中符号是否成出现

    千次阅读 2016-07-07 17:29:55
    //利用堆棧的概念,先进后出的原则判断对应的符号是否成出现 //定义一个字符串和栈 String s="abc([{adsf}]s)df"; Stack ss=new Stack(); boolean flag=true; char c;//定义一个char 遍历字符串的时候...
  • ArcGIS Pro中符号

    2020-03-25 21:26:58
    与ArcMap中符号化类似,ArcGIS Pro中的符号化方式更酷炫,不仅仅可以通过多个图层的方式制作点线面符号,还可以直接制作多图层的符号样式,比如发过的萤火虫效果以及夜空中最耀眼的小星星。今天仅其最基本的符号化...
  • ArcGis Engine实现对符号的预览图输出07-11-12 11:24:09 作者:Aji 出处:中国GIS资讯网在ArcGis Engine实现对符号的预览,生成预览图片。使用的时候只要调用SymbolToBitmp(符号,宽,高)就可以返回生成的图片了...
  • 在ArcGis Engine实现对符号的预览,生成预览图片。使用的时候只要调用SymbolToBitmp(符号,宽,高)就可以返回生成的图片了。关键代码如下:public System.Drawing.Bitmap SymbolToBitmp(ESRI.ArcGIS.Display....
  • 7-2 符号配对

    2019-10-02 18:01:21
    请编写程序检查C语言源程序下列符号是否配对:/与/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的符号不超过100个...
  • C语言符号与无符号

    千次阅读 2018-04-13 18:04:42
    现在我们来分析下C语言的有符号数与无符号数。我们知道,计算机只能识别二进制0和1,那么我们在程序写的-12,计算机该怎么去识别这个"-"号?计算机怎么知道我们写的数,是正数还是负数?现在就一起来...
  • matlab常用符号

    千次阅读 2019-05-15 11:12:42
    在使用MATLAB的过程,经常需要输出图形的变量进行标注,其中经常遇到的难题就是如何标注各种上标、下标、斜体、黑体、箭头、上圆圈、正负号等特殊符号,以及如何标注特殊的数学符号。这里第一机电网给大家总结...
  • 从网上拷下来的代码经常会出现全角符号,代码风格也很糟糕,可以用下面的方法进行修正美化。 1、安装astyle ...#将某个源代码文件的全角符号转换成半角符号 #调用astyle 将某个源代码文件转换成li
  • 在这篇文章,我们将探索比较两组依赖(即成)定量数据的测试:Wilcoxon符号秩检验和配对学生t检验。这些测试之间的关键区别在于Wilcoxon的测试是非参数测试,而t测试是参数测试。在下文中,我们将探讨这种差异的...
  • ArcGis Engine实现对符号的预览图输出 07-11-12 11:24:09 作者:Aji 出处:中国GIS资讯网
  • PTA-符号配对

    千次阅读 2017-11-23 08:13:00
    请编写程序检查C语言源程序下列符号是否配对:/*与*/、(与)、[与]、{与}。
  • 广告关闭2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。1.算数运算符?... 只可以在模块或类定义层内函数进行修饰,不允许修修饰...
  • 符号配对 (20分)

    2020-06-22 20:45:12
    请编写程序检查C语言源程序下列符号是否配对:/与/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的符号不超过100个...
  • 经检查此PN包含有+号,此PN当年很‘单纯’,只包含字母数字,所以被我原封不动的放入url参数,今天它进化出了 +,这在url被转成了空格,而且客户不保证今后不会用其他符号。。。 URL +号表示空格 %2B ...
  • 符号配对 (20 分)

    千次阅读 2018-09-29 19:46:19
    请编写程序检查C语言源程序下列符号是否配对: /* 与 */、( 与 )、[ 与 ]、{ 与 }。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的...
  • 背景:研发反馈,在页面点击上传execl功能,上传文件的时候,tomcat直接拒绝了,显示是url含有相关的字符 解决: 在server.xml设置如下即可 &lt;Connector port="8084" protocol="...
  • // 把字符串直接复制到chars[]数组 content.getChars( 0 , content.length(), chars, 0 ); // 重新拼接 StringBuffer sb = new StringBuffer(); // 循环 for ( int index = 0 ; index ; index++)...
  • 数据结构课设 符号配对

    千次阅读 2016-03-18 08:53:29
    请编写程序检查C语言源程序下列符号是否配对:/*与*/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行只有一个句点.和一个回车的时候,标志着输入结束。程序需要检查配对的符号不超过...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,072
精华内容 10,028
关键字:

对中符号