2013-08-28 5 views

답변

10

간단한 카운터. 모든 때문에 당신이하고있는 계산됩니다 괄호 :

balance = 0 
for c in open('filename.ext', 'r'): 
    if c == '(': 
     balance += 1 
    elif c == ')': 
     balance -= 1 
if balance == 0: 
    print 'parenthesis are (possibly) balanced' 
else: 
    print 'parenthesis are not balanced' 

(아마도)? ...

a(bc))d(ef 

당신이 무엇을 기대 아마 그래서 ... 당신은 아마 초기 여기에 헤어지고 싶어 : 음,이 방법을 사용하면이 균형을 찾을 것

balance = 0 
for c in open('filename.ext', 'r'): 
    if c == '(': 
     balance += 1 
    elif c == ')': 
     balance -= 1 
     if balance < 0: 
      break # -1 -> we found a closing paren without an opening one... 
if balance == 0: 
    print 'parenthesis are balanced' 
else: 
    print 'parenthesis are not balanced' 
+4

충분하지 않습니다. ') ('균형이 맞지 않습니다. –

+0

@AkiSuihkonen 언제든지 균형이 0 아래로 떨어지면 파일의 균형이 맞지 않으므로 그 자리에 – SirDarius

+0

@AkiSuihkonen의 수표를 추가해야합니다. 수표를 추가했습니다 ... –

3

은 " 스택 오버플로 "사람들은 일반적으로 스택을 (데이터 구조로) 사용하는 것과 관련이 없다고 말합니다.

스택 사용은 대부분 합리적인 방법입니다. 당신의 의도 인 경우 단지 모든 여는 괄호가 대응을 마감했다

  1. 을 찾아
  2. 은 닫는 괄호가 여는 괄호 전에 일이없는 경우가 없습니다; 사이비 코드

    :

후 간단한 루프 플러스 카운터 그것을 단순히 수

function boolean isBalanced(input) { 
    int counter = 0; 
    while (! input.hasMoreChar) { 
     char c = input.readNextChar(); 
     if (c == OPEN_PARENTHESIS) { 
     counter++; 
     } else if (c == CLOSE_PARENTHESIS) { 
     if (counter == 0) { 
      return false; // Close parenthesis appear without a corresponding open 
     } else { 
      counter--; 
     } 
     } 
    } 

    return counter == 0; 
}