c++でスタックを用いて括弧の対応付けを行うプログラムを作っています。
例えば()()と入力された場合、1122
(())と入力された場合、1221と出力するようにしたいです。
解法
左から順番に括弧を読み込んでいく
𝑖番目の左括弧を読み込んだら、スタックに𝑖をpushし、𝑖を出力する
右括弧を読み込んだら、スタックからpopしたものを出力する
()()と入力すると1133となってしまいます。
正しく1122とさせるにはどう変更すればよいですか。
#include <stdio.h> #include <iostream> #include <stack> #include <string.h> using namespace std; int main(){ stack<int> test; string str; cout << "括弧を入力" << endl; cin >> str; int n; n = str.length(); for(int i = 0 ; i < n ; i++){ if (str[i] == '('){ test.push(i+1); cout << i+1 << "をpushしました" << endl; } else if (str[i]==')'){ cout << test.top() << "をpopしました" << endl; } else{ cout << "エラー:括弧以外が入力されました" << endl; } } }
出力される数字の意味について記載ください。
(たとえば「()()」のときなぜ「1122」となるのか)
回答3件
あなたの回答
tips
プレビュー