我希望每次看到(xxx)
时都会在字符串中包含一个字符串
我只会xxx
。
我试图以递归的方式使用函数int find(char* str)
。
如果没有留下1
或'('
(全部删除),则该函数将返回')'
,否则会返回0
。
字符串可以保持原样,只需要检查规定的条件。
确定输入:(xxx)(zzz(yyy)zzz)
BAD输入:xx(x(zzz)(y
如何在C中完成?
答案 0 :(得分:5)
简单的堆栈是解决此问题的好方法。每次你看到'('推入堆栈。每次看到')'弹出堆栈。如果您尝试弹出一个空堆栈或者在完成后将剩余的东西留在堆栈上,那么输入就很糟糕了。
编辑:你也可以用计数器做同样的事情。分别增加和减少。如果计数器变为负数,则返回false。否则,当你完成时,如果你是0,则返回true,否则返回false。所以计数器只代表'堆栈'的大小。
答案 1 :(得分:5)
我认为这可能是答案,从abelenky继续前一步:
int find(char *str)
{
int pars = 0, pos = 0;
while(str[pos] != 0) {
if (str[pos] == '(') pars++;
if (str[pos] == ')') pars--;
if (pars < 0) return 0; // closes before opens -> end here
pos++;
}
if (pars != 0) return 0; // not matched result
else return 1; // matched result
}