CH03 스택 :: 클램프 검사 프로그램

내가 이겼다.

멍청한 기계공. 감히 사람을 때려

..

……

모든 작업이 완료된 후 !(st.isEmpty())는 ~(st.isEmpty())…로 작성됩니다.

내가 뭘 잘못했는지 생각하며 3시간을 보냈다.

마침내 오류가 발생했습니다.

눈물이 났어요…

//CharArrayStack.h

#ifndef DATA_STRUCTURE_ARRAYSTACK_H
#define DATA_STRUCTURE_ARRAYSTACK_H

#include <iostream>

using namespace std;
const int MAX_ARRAY_SIZE = 50;
class CharArrayStack{
private :
    int top;
    char data(MAX_ARRAY_SIZE);
public :
    CharArrayStack();
    ~CharArrayStack();
    void push(char);
    char pop();
    char peek();
    bool isEmpty();
    bool isFull();
    void display();
};
#endif //DATA_STRUCTURE_ARRAYSTACK_H
//CharArrayStack.cpp

#include "CharArrayStack.h"
#include <iostream>

using namespace std;


   CharArrayStack::CharArrayStack(){
       this->top = -1;
   }
   CharArrayStack::~CharArrayStack(){}

    void CharArrayStack::push(char a){
       data(++top) = a;
   }
    char CharArrayStack::pop(){
       return data(top--);
   }
    char CharArrayStack::peek(){
       return data(top);
   }
    bool CharArrayStack::isEmpty(){
       return (top==-1);
   }
    bool CharArrayStack::isFull(){
       return (top == MAX_ARRAY_SIZE);
   }
    void CharArrayStack::display(){
       for (int i = 0; i <= top ; i++) {
           cout << data(i) << "    ";
       }
       cout << endl;
   }

bool checkMatching(string s){
    CharArrayStack st;
    int strLength = s.length();
    for (int i = 0; i < strLength; i++){
        if ((s.at(i) == '(') || (s(i) == '{') || (s(i) == '('))
            st.push(s(i));
        else if (s.at(i) == ')'){
            if ((st.isEmpty()) || (st.pop() != '(')){
                cout << "error occurred : " << s.at(i) << endl;
                return false;
            }
        }
        else if (s.at(i) == '}'){
            if ((st.isEmpty()) || (st.pop() != '{')){
                cout << "error occurred : " << s.at(i) << endl;
                return false;
            }
        }
        else if (s.at(i) == ')'){
            if ((st.isEmpty()) || (st.pop() != '(')){
                cout << "error occurred : " << s.at(i) << endl;
                return false;
            }
        }
    }
    st.display();
    if (!(st.isEmpty())){
        cout << "stack isn't empty" << endl;
        return false;
    }
    else{
        cout << "no error" << endl;
        return true;
    }
}

int main(){
    string s;
    cout << "enter string:";
    cin >> s;
    cout << checkMatching(s);
    return 0;
}