2012-05-07 74 views
-4

我想獲取字符串中包含的字符串,每當我看到(xxx) 我將只獲得xxx在字符串中獲取字符串c

例如,我試圖以遞歸方式使用函數int find(char* str)來做到這一點。

該函數將返回1如果沒有'('')'左(全部去掉),並0否則。

該字符串可以保持原樣,只需要檢查規定的條件。

OK輸入:(xxx)(zzz(yyy)zzz)

BAD輸入:xx(x(zzz)(y

如何在C做?

+2

你嘗試過什麼?這對於一個基本的循環和'string.h'函數來說是微不足道的。 –

+0

我真的不知道如何處理這個.. – Itzik984

+3

假設輸入字符串是'a(xxx(yyyy)zzzzz)bb',你想看到什麼?輸入字符串是否可能被破壞,或者是否需要返回字符串相關段的副本?如果是後者,則需要擔心內存管理。另外,如果你已經回答了這個字符串,那麼'a)xxx)yyyy(zzzzz(bb')?我們如何從你的原始問題中知道? –

回答

5

一個簡單的堆棧是解決這個問題的好方法。每次你看到一個'('推入堆棧,每次你看到一個')'彈出堆棧。如果你嘗試彈出一個空棧或者當你完成時把剩下的東西留在棧上,那麼輸入是不好的。

編輯:你也可以用計數器做同樣的事情。分別增加和減少。如果計數器變爲負值,則返回false。否則,當你完成時返回true,否則返回false。所以櫃檯只代表'堆'的大小。

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 
} 
+0

而不是'if'語句,你可以簡單地執行'return!pars;'或'return(pars == 0);'。這些都可以保證0或1的返回值。 – dreamlax

+0

右,還有一些其他變體,如'return(pars == 0)?1:0;' –