读书人

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

发布时间: 2013-07-04 11:45:32 作者: rapoo

一个十分简单的题,大家来看看哪里错了
昨天无聊就去做简单题,然后发现错了,大家来看看哪里错了
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");

读书人网 >C语言

热点推荐