Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 표현식에서 주어진 여는 대괄호에 대한 닫는 대괄호의 인덱스 찾기

<시간/>

대괄호가 있는 표현식이 있다고 가정합니다. 하나의 시작 괄호의 인덱스가 주어지면 그 끝 괄호를 찾아야 합니다. 따라서 표현식이 (25*6+(88-32+(50/10)+20))이고 여는 대괄호의 인덱스가 6인 경우 닫는 대괄호는 위치 23에 있습니다.

여기서는 스택 데이터 구조를 사용하여 이 문제를 해결합니다. 주어진 인덱스에서 표현식을 탐색하고 닫는 괄호를 찾으면 여는 괄호를 밀기 시작하고 스택이 비어 있을 때 스택에서 요소를 팝한 다음 인덱스를 반환합니다.

예시

#include<iostream>
#include<stack>
using namespace std;
void getEndingBracketIndex(string exp, int index){
   int i;
   if(exp[index]!='('){
      cout << exp << "Closing bracket of parentheses started at " << index << " present at index -1\n";
      return;
   }
   stack <int> stk;
   for(i = index; i < exp.length(); i++){
      if(exp[i] == '(')
         stk.push(exp[i]);
      else if(exp[i] == ')'){
         stk.pop();
         if(stk.empty()){
            cout << exp << ", Closing bracket of parentheses started at " << index << " present at index " << i << "";
            return;
         }
      }
   }
   cout << exp << ", Closing bracket of parentheses started at " << index << " present at index -1";
}
int main() {
   getEndingBracketIndex("(25*6+(88-32+(50/10)+20))", 6);
}

출력

(25*6+(88-32+(50/10)+20)), Closing bracket of parentheses started at 6 present at index 23