0

この質問があります、

テキストの区切り記号のバランスが取れているかどうかを判断する関数を作成します。有効な区切り文字のペアは、()、[]、{}、および <> です。それらは入れ子になっている場合があります。さらに、テキスト区切り文字 ' と " が適切に一致していることを確認します。

ちなみに私はJavaでコーディングしています..

各テスト行の出力は、区切り記号が一致している場合は「1」、それ以外の場合は「0」です。

以下の例では、

4 --- 0

{123} --- 1

{qweqwe{sdad} --- 0

問題は、有効な区切り文字のペアが一致しているかどうかを確認するために、Java コードでどのように記述できるかということです。申し訳ありませんが、区切り記号についてはほとんど知識がありません。

以下は私のコードです..

public static void main(String args[]) {
        String a1 = "";
        try {
            Scanner readFile = new Scanner(new File("2.in.txt"));
            while (readFile.hasNextLine()) {

                a1 = readFile.nextLine();
                System.out.println(a1);
                if (a1.equals("18")) {
                    System.out.println("0");
                } else {
                    System.out.println("1");
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return;
        }
    }
4

3 に答える 3

6

この問題の一般的な解決策は、スタックを使用することです。空のスタックから始まる入力文字列ごとに、次のようにします。

  • 開き括弧が検出されたら、それをスタックにプッシュします。
  • 閉じ括弧が検出されたら、スタックからポップし、閉じ括弧と比較して、それらが一致するペアであるかどうかを確認します。そうでない場合は、 を返しfalseます。はいの場合は、続行します。

文字列の処理が終了したら、スタックが空かどうかを確認します。はいの場合は return true、そうでない場合は return false

引用符'との場合、引用"符が同じ引用符内にあることを許可せず、エスケープ構文を考慮しない場合、解決策は同じになります。

于 2012-07-23T10:43:49.333 に答える
3

このコードを見てください。同様のタスクを解決します。

import java.util.Stack;

class BracketChecker {
  private String input;

  public BracketChecker(String in) {
    input = in;
  }

  public void check() {
    Stack<Character> theStack = new Stack<Character>();

    for (int j = 0; j < input.length(); j++) {
      char ch = input.charAt(j);
      switch (ch) {
      case '{': 
      case '[':
      case '(':
        theStack.push(ch);
        break;
      case '}': 
      case ']':
      case ')':
        if (!theStack.isEmpty()) {
          char chx = theStack.pop();
          if ((ch == '}' && chx != '{') || (ch == ']' && chx != '[') || (ch == ')' && chx != '('))
            System.out.println("Error: " + ch + " at " + j);
        } else

          System.out.println("Error: " + ch + " at " + j);
        break;
      default:
        break;
      }
    }
    if (!theStack.isEmpty()){
      System.out.println("Error: missing right delimiter");
    }
  }
}

public class MainClass {
  public static void main(String[] args) {
    String input;
    input = "[]]()()";

    BracketChecker theChecker = new BracketChecker(input);
    theChecker.check();
  }

}
于 2012-07-23T10:41:07.213 に答える