求大神帮我看下这段代码为什么有问题

qq_36462802 2016-10-21 01:37:25
问题是这样的
括号配对问题
时间限制:3000 ms | 内存限制:65535 KB
难度:3
描述
现在,有一行括号序列,请你检查这行括号是否配对。
输入
第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符
输出
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No
样例输入
3
[(])
(])
([[]()])
样例输出
No
No
Yes


#include<iostream>
#include<string>
using namespace std;
int c;
int maxSize;
char peidui[20000];
int top = -1;
void push(char j)
{
peidui[++top] = j;
}
char pop()
{
return peidui[top--];
}
bool isEmpty()
{
return(top == -1);
}
void input(string input)
{
c = input.length();
// creation(c);
for (int j = 0;j < c;j++)
{
char ch = input[j];
switch (ch)
{
case '[':
case '(':
push(ch);
break;
case ']':
case ')':
if (!isEmpty())
{
char chx = pop();
if ((ch == ']' && chx != '[') ||
(ch == ')' &&chx != '(')
)
{
cout << "No" << endl;
goto end;
}
}
else
{
cout << "No" << endl;
break;
goto end;
}
break;
default:
break;
}
}
if (isEmpty())
cout << "Yes" << endl;
else
cout << "No" << endl;
end:return ;
}
int main()
{
int n;
cin >> n;
for (int i = 0;i < n;i++)
{
string str;
cin >> str;
input(str);
top = -1;
char peidui[] = {0};
}
return 0;
}


老是说我错误...求大神指点
...全文
154 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingya124 2019-03-17
  • 打赏
  • 举报
回复

Sub foreachnext循环语句2()
Dim wh As Worksheet, n As Byte, m As String
For Each wsk In Worksheets
n = n + 1
m = wh.Name
Sheet1.Cells(n, 3) = m
Next
End Sub
求大神帮我看些这哪儿有问题,谢谢
paschen 2016-10-21
  • 打赏
  • 举报
回复
输入(]) 的时候,没有输出啊
赵4老师 2016-10-21
  • 打赏
  • 举报
回复
仅供参考:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define STACK_INIT_SIZE 10
#define STACK_GROW_SIZE 5
#define ELEMTYPE char
#define OK 1
#define ERROR 0
typedef struct { /*建立一个栈的首结点*/
    ELEMTYPE * base;
    ELEMTYPE * top;
    int stacksize;
} SpStack;
int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/
    s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));
    if (!s->base) return ERROR;
    s->top=s->base;
    s->stacksize=STACK_INIT_SIZE;
    return OK;
}
int StackEmpty(SpStack *s) { /*判断栈是否为空*/
    if (s->top==s->base) return OK;
    else                 return ERROR;
}
int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/
    if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/
        s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));
        if (!s->base) return ERROR;
        s->stacksize+=STACK_GROW_SIZE;
        s->top=s->base+s->stacksize;
    }
    *s->top++=e;
    return OK;
}
int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/
    if (StackEmpty(s)) return ERROR;
    *e=*(--s->top);
    return OK;
}
int Comp(ELEMTYPE a,ELEMTYPE b) {
    if ((a=='('&&b!=')')
      ||(a=='['&&b!=']')
      ||(a=='{'&&b!='}')) {
        return ERROR;
    } else return OK;
}
int Count(SpStack *s) {
    ELEMTYPE e[STACK_INIT_SIZE*2];
    ELEMTYPE e1;
    int i;

    InitStack(s);
    fgets(e,STACK_INIT_SIZE*2,stdin);
    if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;
    printf("%s\n",e);
    for (i=0;e[i]!='\0';i++) {
        switch (e[i]) {
        case '(':
        case '[':
        case '{':
            Push(s,e[i]);
            break;
        case ')':
        case ']':
        case '}':
            if (StackEmpty(s)) {
                printf("%*s↖右括号多余\n",i+1,"");
                return(ERROR);
            } else Pop(s,&e1);
            if (!Comp(e1,e[i])) {
                printf("%*s↖左右匹配出错\n",i+1,"");
                return(ERROR);
            }
        }
    }
    if (!StackEmpty(s)) {
        printf("%*s↖左括号多余\n",i,"");
        return(ERROR);
    } else {
        printf("匹配正确\n");
        return(OK);
    }
}
void main() {
    SpStack s;
    Count(&s);
    free(s.base);
}
  • 打赏
  • 举报
回复
仅供参考:

#include <stdio.h>

char buf[10001];

bool CheckMatch()
{
  char * p = buf;
  int lb = 0, rb = 0, lsb = 0, rsb = 0;
  bool mismatch = false;
  short int m1= 0x5d28, m2 = 0x295b;
  if (*(char *)&m1 != 0x28) {m1 = 0x285d; m2 = 0x5b29;}
  while (*p)
  {
    if ((*(short *)p == m1) || (*(short *)p == m2)) {mismatch = true; break;}
    if (*p == '(') lb++;
    else if (*p == ')') rb++;
    else if (*p == '[') lsb++;
    else if (*p == ']') rsb++;
    p++;
  }
  if (!mismatch && (lb == rb) && (lsb == rsb)) return true;
  return false;
}

int main()
{
  int casenum = 0;
  scanf("%d\n", &casenum);
  while (casenum > 0)
  {
    scanf("%s\n", buf);
    if (CheckMatch()) printf("Yes\n");
    else
      printf("No\n");
    casenum--;
  }
  return 0;
}

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧