Bash脚本用于查找文件中的括号是否已正确关闭

时间:2014-10-07 11:15:52

标签: bash shell matching brackets

我是初学者,所以我有这个愚蠢的问题。假设我有一个bracket.txt文件,它有一个像这样的字符串“(()))))(()()()()()()()()()()()”我想要写一个脚本,检查所有括号是否正确关闭,并且没有太多(打印“一切正确”或类似的东西)。例如,在“))))(((((”每个括号有一个匹配的,但他们没有正确关闭。我知道如何找到并计算他们但检查部分真的很烦我,我会非常感谢你的帮助!

3 个答案:

答案 0 :(得分:3)

继续删除(),直到你不能再继续。如果剩下任何内容,则输入无效。

while [[ $string = *'()'* ]] ; do
    string=${string//()/}
done

if [[ $string ]] ; then
    echo Invalid
else
    echo Valid
fi

答案 1 :(得分:1)

嗯,这应该是逻辑。

  1. 如果字符串以")"开头? - 这是不正确的
  2. 如果以"("进入(3)
  3. 开头
  4. 对于每个"("增加一个计数器说,' openBraces&#39 ;;对于每个')'遇到了递减计数器
  5. 如果在结束(3)结束时超过了' openBraces'是0;你的所有牙套都关闭了;否则有些不对劲 注意:正数' openBraces'表示超过'('以及' openBraces'的负值表示超出')'。
  6. 希望有所帮助

答案 2 :(得分:-1)

我想你可以试试下面的代码:

    String input = "()))((";
     int count1=0;
     int count2=0;
     boolean temp = false;
     char[] a = new char[input.length()];
     for(int x=0;x<input.length();x++){
         a[x] = input.charAt(x);
         if(a[x]=='('){
             count1++;
         }
         else if(a[x]==')'){
             count2++;
         }
     }
     if(a[0]==')'){
         temp = true;
     }
     else if(a[0]=='(' && count1==count2){
         int t1=1;
         int t2=0;
         for(int x=1;x < input.length();x++){
             if(a[x]=='('){
                 t1++;
             }
             if(a[x]==')'){
                 t2++;
                 if(t2>t1){
                   temp = true;
                   break;
                 }
             }
         }

    }
     else{
        temp = true;
     }
     if(!temp){
         System.out.println("correct");
     }
     else{
         System.out.println("incorrect");
     }