-4

我想得到一个包含在一个字符串中的字符串,每次我看到(xxx) 我只会得到xxx.

例如,我正在尝试使用函数以递归方式进行操作int find(char* str)

1如果没有'('')'离开(全部删除),则该函数将返回,0否则。

字符串可以保持原样,只需要检查规定的条件。

确定输入: (xxx)(zzz(yyy)zzz)

错误的输入:xx(x(zzz)(y

如何在 C 中做到这一点?

4

2 回答 2

5

一个简单的堆栈是解决这个问题的好方法。每次看到 '(' 压入堆栈。每次看到 ')' 从堆栈中弹出。如果您曾经尝试弹出一个空堆栈或在完成后将一些东西留在堆栈上,那么输入是错误的。

编辑:你也可以用计数器做同样的事情。分别递增和递减。如果计数器变为负数,则返回 false。否则,当您完成时,如果您为 0,则返回 true,否则返回 false。所以计数器只代表“堆栈”的大小。

于 2012-05-07T22:46:20.740 回答
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
}
于 2012-05-07T22:52:22.693 回答