2014-05-07 99 views
0

請告訴我,我做錯了什麼? 我需要確保表達式是平衡 我什麼都試過,但我甚至不得到錯誤平衡表達與堆棧

int main() { 
    ifstream infile; 
    infile.open("input.txt"); 

    string exp; 
    cout << "Enter an expression "; 
    while (getline(infile, exp)) { 
     cout << exp << ": "; 
     if (matcher(exp)) 
      cout << "Matched ok" << endl; 
     else 
      cout << "Match error" << endl; 
     cout << "Enter an expression: "; 
    } 

    cout << "--- Done ---" << endl; 

    return 0; 
} 

int matcher(string expression) { 
    stack<char> s; 
    for (int i = 0; i < expression.length(); i++) { 
     if (isOpener(expression[i])) 
      s.push(expression[i]); 
     else if (isCloser(expression[i])) { 
      if (s.empty()) return 1;  
      char opener = s.top(); 
      s.pop(); 
      if (!matches(opener, expression[i])) return 1; 
     } 
    } 

    if (!s.empty()) return 1; 
    return 0; 
} 
+1

這裏有什麼問題? – tod

+0

定義的'matches'函數在哪裏? '匹配(開叫者,表達[我])'? –

+0

@ user3612601那麼如果你在問題中提到它會更好。 –

回答

1

一個obivous問題 - 你matcher功能似乎返回1失敗(不匹配)和0對於成功,而是你main打印ok如果matcher返回非零...

+0

我認爲它的工作,我會嘗試添加更多的表達看看它是如何去 – user3612601

0

我將承擔isOpener()matches()工作如預期,因爲你沒有顯示它們。

如果是這樣,問題是您誤解了int -> bool轉換。零轉換爲false,非零整數轉換爲true。您最好宣佈matcher()返回bool並直接返回truefalse。您需要返回false那裏您現在返回1true那裏您現在返回0