我想獲取字符串中包含的字符串,每當我看到(xxx)
我將只獲得xxx
。在字符串中獲取字符串c
例如,我試圖以遞歸方式使用函數int find(char* str)
來做到這一點。
該函數將返回1
如果沒有'('
或')'
左(全部去掉),並0
否則。
該字符串可以保持原樣,只需要檢查規定的條件。
OK輸入:(xxx)(zzz(yyy)zzz)
BAD輸入:xx(x(zzz)(y
如何在C做?
我想獲取字符串中包含的字符串,每當我看到(xxx)
我將只獲得xxx
。在字符串中獲取字符串c
例如,我試圖以遞歸方式使用函數int find(char* str)
來做到這一點。
該函數將返回1
如果沒有'('
或')'
左(全部去掉),並0
否則。
該字符串可以保持原樣,只需要檢查規定的條件。
OK輸入:(xxx)(zzz(yyy)zzz)
BAD輸入:xx(x(zzz)(y
如何在C做?
一個簡單的堆棧是解決這個問題的好方法。每次你看到一個'('推入堆棧,每次你看到一個')'彈出堆棧。如果你嘗試彈出一個空棧或者當你完成時把剩下的東西留在棧上,那麼輸入是不好的。
編輯:你也可以用計數器做同樣的事情。分別增加和減少。如果計數器變爲負值,則返回false。否則,當你完成時返回true,否則返回false。所以櫃檯只代表'堆'的大小。
我想這可能是答案,延續了前從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
}
而不是'if'語句,你可以簡單地執行'return!pars;'或'return(pars == 0);'。這些都可以保證0或1的返回值。 – dreamlax
右,還有一些其他變體,如'return(pars == 0)?1:0;' –
你嘗試過什麼?這對於一個基本的循環和'string.h'函數來說是微不足道的。 –
我真的不知道如何處理這個.. – Itzik984
假設輸入字符串是'a(xxx(yyyy)zzzzz)bb',你想看到什麼?輸入字符串是否可能被破壞,或者是否需要返回字符串相關段的副本?如果是後者,則需要擔心內存管理。另外,如果你已經回答了這個字符串,那麼'a)xxx)yyyy(zzzzz(bb')?我們如何從你的原始問題中知道? –