问题描述:
输入一串字符(长度小于250),以‘?’结束,判断括号是否配对,配对则输出‘yes’,不配对则输出‘no’。
输入样例:
((())(()()))?
输出样例:
yes

分析:so easy~如果遇到‘(’则压栈,遇到‘)’则出栈,当栈下溢或字符串处理完毕而栈非空时,返回‘no’不配对。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int i, j, top, len;
char ch;
char stack[250];
char s[250];

void push(char ch)
{
    top += 1;
    stack[top] = ch;
    printf("push %c, top = %d\n", ch, top);
}

void pop()
{
    if (top==0)
    {
        printf("no\n");
        exit(1);
    }
    else 
    {
        printf("pop %c, now top = %d\n", stack[top], top-1);
        stack[top] = ' ';
        top -= 1;
    }
}

int main()
{
    memset(s, ' ', sizeof(s));
    memset(stack, ' ', sizeof(stack));
    top = 0;
    scanf("%s", s);
    i = 0;
    while (s[i]!='?')
    {
        if (s[i]=='(')
            push(s[i]);
        else if (s[i]==')')
        {
            if (top==0) 
            {   
                printf("no\n");
                exit(1);
            }
            pop();
        }
        i += 1;
    }
    if (top==0) 
        printf("yes\n");
    else 
        printf("no\n");
}