C++Javaの括弧に一致(スタック実装)

2304 ワード

タイトルの説明
ある文字列(長さが100を超えない)に左かっこ、右かっこ、大文字と小文字があります.(一般的な演算式と同様に)いずれの左かっこも、右側で最も近い右かっこと内側から外側に一致することを規定します.プログラムを書いて、一致しない左かっこと右かっこを見つけて、元の文字列を出力して、次の行に一致しないかっこを表示します.一致しない左かっこは「$」で、一致しない右かっこは「?」寸法.
入力
入力には複数のデータが含まれ、各データのセットに1行、1つの文字列が含まれ、左右の括弧と大文字と小文字のみが含まれ、文字列の長さは100を超えない.
しゅつりょく
出力データのセットごとに2行出力し、最初の行には元の入力文字が含まれ、2行目には「$」、「?」とスペースで構成され、「$」と「?」これに対応する左かっこと右かっこが一致しないことを示します.
C++コードは以下の通りです.
#include 
#include 
#include 
using namespace std;
int main()
{

		string a, str;
		while (cin>>a) {
			int k = -1;
		str = a;
		for (int i = 0; i < a.length(); i++)
			cout << a[i];
		cout << endl;
		for (int i = 0; i < a.length(); i++)
			str[i] = ' ';
		stackb;
		for (int i = 0; i < a.length(); i++)
		{
			if (a[i] == '(')
			{
				b.push(i);
			}
			else if (a[i] == ')')
			{
				if (b.empty())
				{
					k = i;
					str[i] = '?';
				}
				else
				{
					b.pop();
				}
			}
		}
			int counts = b.size();
			for (int i = 0; i < counts; i++)
			{
				str[b.top()] = '$';
				b.pop();
			}
			for (int i = 0; i < str.length(); i++)
				cout << str[i];
			cout << endl;
	}
	system("pause");
}

Javaコードは次のとおりです.
package kuohao;
import java.util.Scanner;
import java.util.Stack;
import java.util.ArrayList;
public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		String a=new String();
		while(true)
		{
			Stack b=new Stack();
			if(sc.hasNextLine())
			{
				a=sc.nextLine();
			}
			else
			{
				break;
			}
			System.out.println(a);
			ArrayList left=new ArrayList();
			ArrayList right=new ArrayList();
			ArrayList result=new ArrayList();
			for(int i=0;i

提出中に発見:1、Javaは直接while(true)2、終了後、Scannerを入力して閉じる必要がある
また、Java版はもっとシンプルなコードを思いつかず、dalao教があることを望んでいます~