前提・実現したいこと
C++でスタックを使って括弧の対応検査をしたいのですが、入力に対して出力がおかしいです。
キーボードから文字列を入力し、「(),[],{}」の三種類の括弧が対応しているかを検査します。
・開き括弧の数<閉じ括弧の数→開き括弧が不足
・閉じ括弧の数<開き括弧の数→閉じ括弧が不足
・開き括弧と閉じ括弧の対応が取れていない→開き括弧と閉じ括弧が対応していない
・上記三つに当てはまらない場合→括弧の対応が取れている
という旨をそれぞれの場合によって出力したいです。
何回もコードを見直したのですが、自分でどこが間違っているのか分かりません。
どこが間違っているか教えていただけますでしょうか。
###入力と出力
入力:() 出力:開き括弧と閉じ括弧の型が不一致です。
入力:{} 出力:括弧の対応が取れています。
入力:[aaa] 出力:括弧の対応が取れています。
入力:{aaa{ 出力:括弧の対応が取れています。
該当のソースコード
C++
1#include<iostream> 2#include <stack> 3using namespace std; 4 5void main() { 6 stack<char> st; //スタック 7 char left[3] = { '(','[','{' }; //開き 8 char right[3] = { ')',']','}' };//閉じ 9 char in; //入力 10 char R; //ポップした閉じかっこ入れ 11 cout << "カッコ対応検査をする文字列を入力してください。\n"; 12 13 //最初の一文字をとる 14 in = cin.get(); 15 16 while (in != '\n') { 17 for (int i = 0; i < 3; i++) { 18 //inが開きカッコの時 19 if (in == left[i]) { 20 st.push(in); 21 } 22 //inが閉じカッコの時 23 else if (in == right[i]) { 24 //閉じカッコかつスタックが空の時、開きかっこ不足 25 if (st.empty()) { 26 cout << "開き括弧が不足です。\n"; 27 return; 28 } 29 //閉じカッコかつスタックが空じゃないとき 30 else { 31 //Rにポップした閉じカッコを入れる 32 R = st.top(); 33 st.pop(); 34 //inとRが対応しているカッコか調べる 35 for(int j = 0; j < 3; j++) { 36 if (!((R == right[j]) && (in == left[j]))) { 37 cout << "開き括弧と閉じ括弧の型が不一致です。\n"; 38 return; 39 } //if 40 } //for 41 } //else 42 } //else if 43 //inが開きカッコでも閉じカッコでもないとき 44 } 45 //次の一文字を読む 46 in = cin.get(); 47 } 48 //ここまで終わってスタックが空ではないとき、閉じかっこ不足 49 if (!st.empty()) { 50 cout << "閉じ括弧が不足です。\n"; 51 return; 52 } 53 //上記すべてに当てはまらないとき、カッコの対応が取れている 54 cout << "括弧の対応が取れています。\n"; 55 56}
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/17 09:57
2018/06/17 10:01
2018/06/17 11:03