求c语言高手,括号配对问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c语言高手,括号配对问题相关的知识,希望对你有一定的参考价值。

描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])样例输出
No
No
Yes
#include <stdio.h>
#define SIZE 3
int main (void)

char n[SIZE];
int num, row, change,number;
char t, m, q;
change = 1;
number = 0;
printf ("请输入要判断多少行\n");
scanf ("%d", &row);
for (;change <= row;change ++)

for (;number < SIZE; number++)

scanf ("%c", n);

t = 'A';
for (number = 0;number < SIZE; number++)

if(n[number] >= t)
t = n[number];

m = 'z';
for (number = 0;number < SIZE; number++)

if (n[number] <= m)
m = n[number];

for (number = 0;number < SIZE; number++)

if (n[number] <= m && n[number] >= t)
q = n[number];

printf ("\n");

printf ("%c %c %c", m, q, t);
return 0;

我的这段代码为什么不行

Status matching(char exp[])

int state = 1; i=0,ii=0;
while (i<=Length(exp) && state)

switch of exp[i]

case ‘(’:
case ‘[’ :
Push(S,exp[i]); i++; break;
case ‘)’ :
if(NOT StackEmpty(S)&&GetTop(S)=“(“)
Pop(S,e); ii++; else state = 0; return No;
case ‘]’ :
if(NOT StackEmpty(S)&&GetTop(S)=“[“)
Pop(S,e); ii++; else state = 0; return No;
//switch
if (StackEmpty(S)&&state) return YES;


以上我给出你的,是一个伪代码。

你的问题要用到数据结构里的栈。

遇到(或者[ ,就把它压入栈内。

遇到)或者] ,首先检测栈是不是为空,如果不为空,在返回栈顶元素,如果匹配,即为“(”或者“[”,就删除栈顶元素,然后重复。

当栈变空了,说明你的括号都配对了,也就YES了。

如果途中出现不配对的情况,就直接返回NO。

求给最佳答案!追问

哎呀呀,大神,你让我很纠结。我主要是想要源码啊。。。。。
伪代码写得那么好,就把源码也附上吧

追答

额,太长了,没太多时间打,给你一个连接吧,你去那里看,有现成的。

http://zhidao.baidu.com/question/144847025.html?fr=qrl&cid=866&index=2

参考技术A scanf ("%c", n);
改成
scanf ("%c", n+number);
还有这段,完全搞不懂你想干什么,完全可以把<=和>=改成==或者你都不用for直接改成if(m==t) q=n[number];
for (number = 0;number < SIZE; number++)

if (n[number] <= m && n[number] >= t)
q = n[number];
参考技术B 描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])样例输出
No
No
Yes
参考技术C 不知道啊

C语言问题,急求高手(05,4,44)

(44)有下列程序:
main( )
int num[4][4]=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j;
for(i=0;i<4;i+ +)
for(j=0;j<i;j+ +)
printf("%4c",' ');
for(j=__;j<4;j+ +)
printf("%4d",num[i][j]);
printf("\n");


若要按下列形式输出数组右上半三角。
1 2 3 4
6 7 8
11 12
16
则在程序下划线处应填入的是( )。
A)i-1 B)i
C)i+1 D)4-i
为什么选B呢,第一个printf里那个空格是什么意思啊,谢谢

你用答案和程序比对一下,你就发现这个规律了
1 2 3 4 是num[0][0]开始到num[0][3] //当i=0时,j=0
6 7 8 是num[1][1]开始到num[1][3] //当i=1时,j=1
11 12 是num[2][2]开始到num[2][3] //当i=2时,j=2
16 是num[3][3]开始到num[3][3] //当i=3时,j=3
参考技术A 第一个printf输出的是每两个数字用一个空格作为分隔符。至于选B个人认为是控制数组行、列输出元素的个数。

以上是关于求c语言高手,括号配对问题的主要内容,如果未能解决你的问题,请参考以下文章

编写一个测试程序,检查一个C语言程序中括号的配对情况。

在嵌套使用if语句时,C语言规定else总是和之前与其最近的if配对?

[PTA][C语言][数据结构]判断表达式中括号是否匹配

求C语言高手解答 求e的近似值,直到某一项的值小于或等于10-7为止。 将下列程序补充完整。

求C语言高手!

C语言分治法求最近对问题 运行一直报错 求高手修改