2014-09-17 4 views
-1

몇 시간 동안이 프로그램을 살펴 보았습니다. 이 프로그램은 컴파일 될 것이고, 오류를 올바르게 감지 할 수 없습니다. 그리고 어떤 이유로 나는 hey [] 또는 hey {] 등을 입력 할 때 작동 할 것입니다. 그러나 hey [] 또는 hey {]에서는 작동하지 않습니다. 분명히 모든 경우에 오류를 감지해야하지만 어떤 이유로 '헤이'이후의 공간이 차이를 만듭니다. CIN 공백을 만날 때까지구분 기호가 일치하는 간단한 프로그램이 작동하지 않습니다.

#include<iostream> 
#include <stack> 
using namespace std; 

bool delimiterMatching(char *file){ 
    stack<char> x; 
    int count = 0; 
    char ch, onTop, check; 
    while(ch != '\0'){ 
    ch = file[count]; 
    if (ch == '(' || ch == '[' || ch == '{') 
     x.push(ch); 
    else if (ch == ')' || ch == ']' || ch == '}') { 
     onTop == x.top(); 
     x.pop(); 
     if((ch==')' && onTop!='(') || (ch==']' && onTop!='[') || (ch=='}' && 
           onTop!= '{')) 
    return false; 
    } 
    count++; 
    } 

    if (x.empty()) 
    return true; 
    else 
    return false; 

} 


int main() 
{ 
    char *test = new char(); 
    cout << "enter sentence: "; 
    cin >> test; 

    if (delimiterMatching(test)) 
    cout << "success" << endl; 
    else 
    cout << "error" << endl; 

    return 1; 
} 

답변

0

cin >> test하면 전체 문장 만 문자열을하지 않습니다. 당신이 (hey)를 입력하면 그래서, thest는 (hey 것이 예상대로 (hey)가 작동합니다 반면 닫는 중괄호는 다음 >> 읽을 수있다.

당신은 적절한 입력을위한 너무 짧은 수 있습니다 귀하의 test 할당으로 두 번째 문제가 있습니다.

변경 주는()으로는 다음과 같습니다

char *test = new char[256]; // enough space. COnsider also string 
cout << "enter sentence: "; 
cin.getline(test, 256);  // full line input. 
... 

당신은 delimiterMatching()에서 또한 2 불쾌한 버그가 있습니다.

  • 먼저 당신은 당신의 while 상태로 초기화되지 않은 ch를 사용합니다. ch를 0이 아닌 char로 초기화하거나 while (file[count])을 사용하십시오.
  • 그리고 onTop == x.top();을 보았습니까? onTop = x.top();일까요?
+0

고마워요! onTop = xtop()을 수정하는 것처럼 보입니다. 그리고 공간에 대한 당신의 설명에 감사드립니다! 또한 테스트를 문자열 변수로 초기화하는 방법은 무엇입니까? 문자열을 char * 함수로 전달할 수 없기 때문입니다. 바보 같은 질문에 사과드립니다. – pr0grammingIsFun

+0

마지막으로 count가 항상 증가하기 때문에 while (file [count])이 무한 루프로 들어 가지 않는 이유를 알 수 없습니다. – pr0grammingIsFun

+0

왜냐하면'while (file [count])'는'while (file [count]! = '\ 0')'과 같은 의미이기 때문에. 문자열 주제에 대해서는 delilimerMatching 만 읽기 때문에 매개 변수를'const char * '로 정의 할 수 있습니다. 따라서 test가 문자열이면'test.c_str()'을 인수로 전달할 수 있습니다 – Christophe

관련 문제