-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;
}
고마워요! onTop = xtop()을 수정하는 것처럼 보입니다. 그리고 공간에 대한 당신의 설명에 감사드립니다! 또한 테스트를 문자열 변수로 초기화하는 방법은 무엇입니까? 문자열을 char * 함수로 전달할 수 없기 때문입니다. 바보 같은 질문에 사과드립니다. – pr0grammingIsFun
마지막으로 count가 항상 증가하기 때문에 while (file [count])이 무한 루프로 들어 가지 않는 이유를 알 수 없습니다. – pr0grammingIsFun
왜냐하면'while (file [count])'는'while (file [count]! = '\ 0')'과 같은 의미이기 때문에. 문자열 주제에 대해서는 delilimerMatching 만 읽기 때문에 매개 변수를'const char * '로 정의 할 수 있습니다. 따라서 test가 문자열이면'test.c_str()'을 인수로 전달할 수 있습니다 – Christophe