首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个十分简单的题,大家来看看错哪了

2013-07-04 
一个十分简单的题,大家来看看哪里错了昨天无聊就去做简单题,然后发现错了,大家来看看哪里错了Description

一个十分简单的题,大家来看看哪里错了
昨天无聊就去做简单题,然后发现错了,大家来看看哪里错了
Description

  给你一个字符串,只含有‘(’和‘)’,然后你判断一下是否合法
Input
有多组数据,每组数据一行字符串s(|s|<=100),如题目所述
Output
如果合法则输出YES,否则输出NO。
Sample Input
(()())
)(
Sample Output
YES
NO


我的代码

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

int match(char *a,int top,char c)
{
    if(a[top]=='('&&c==')')
        return 1;
    return 0;
}

int main()
{
    int top;
    int i ,j;
    char str[120]={0};
    int len;
    char stack[120]={0};
    while(scanf("%s",str)!=EOF)
    {
        len=strlen(str);
        top=1;
        for(i=0;i<len;i++)
        {
            if(match(stack,top-1,str[i]))          //如果匹配,则出栈
               top--;
            else
               stack[top++]=str[i];                      //否则进栈
        }
        if(top-1)                                                   //如果最后top不是1,那么是错误的
           printf("N0\n");
        else
           printf("YES\n");
        memset(str,0,sizeof(str));
        memset(stack,0,sizeof(stack));
    }
    return 0;
}

分享到:
[解决办法]


int valid( char * input )
{
    int count = 0;
    int is_valid_char = 1;
    assert(input != NULL);
    while ( (*input != '\0') && is_valid_char && (count >= 0) )
    {
       switch (*input)
       {
       case '(':
          ++ count;
          break;
       case ')';
          -- count;
          break;
       default:
          is_valid_char = 0;
          break;
       }
     }
     return (count == 0) && is_valid_char;
}

[解决办法]
输入空行应该输出YES
输入无法结束。
不要用scanf,应该改用gets。不过修改后依赖不通过,应该还有其它问题。
[解决办法]
printf("NO\n"); //错printf("N0\n");

热点排行