不用棧檢查小括號 中括號 大括號的匹配

2021-06-03 02:38:15 字數 1486 閱讀 2109

設定三個計數器初值設為零,分別記錄小括號、中括號、大括號。開始進行第一次掃瞄,從左向右依次掃瞄每個字元,遇到左括號計數器加一,遇到右括號計數器減一,出現計數器小於零時,報錯退出。掃瞄結束後,若三個計數器有乙個不為零說明括號不匹配,報錯結束檢查。

第一步掃瞄結束,如果正確說明三種括號本身匹配正確。現在可能出現的錯誤只可能是不同括號出現交叉,比如 ,(。

計數器清零,現在從左向右依次掃瞄每個字元,直到遇到右括號,計數器加一,然後逆向掃瞄右括號之前的字元。遇到右括號計數器加一,遇到左括號計數器減一,直到遇到與開始處同型別的左括號,而且此型別計數器為零,如果此時其他兩種括號計數器有不為零的,一定是存在交叉錯誤,報錯結束掃瞄。否則計數器清零,繼續向右掃瞄找到下乙個右括號,重複上述操作直到掃瞄完整個字串。

#define _using_goto_in_bracketsmatchingcheck_  1

/* 引數:szsrc 為待檢測字串。

返回值:括號匹配正確 返回1值,否則返回0值。

*/int bracketsmatchingcheck(const char *szsrc)

計數器 */

if (szsrc == null)

return 1;

while((int)(c = *ptr++)) /* 第一次掃瞄 */

else if (c == ')')

else if (c == '[')

else if (c == ']')

else if (c == '

else if (c == '}')

} if (parenthesis != 0 || brackets != 0 || braces != 0) /* 括號不匹配,退出 */

return 0;

ptr = szsrc;

while((int)(ch = *ptr)) /* 第二次掃瞄 */

else

return 0;}}

else if (c == ']')

++brackets;

else if (c == ')')

++parenthesis;

else if (c == '(')

else if (c == '}')

++braces;

else if (c == '

}else if (ch == '}')

else

return 0;}}

else if (c == '}')

++braces;

else if (c == ')')

++parenthesis;

else if (c == '(')

else if (c == ']')

++brackets;

else if (c == '[')

--brackets;}}

++ptr;

} return 1;

}

正則中的小括號 中括號 大括號 分析

乙個示例 var reg d 18 19 20 d 0 1 9 1 012 0 1 9 1 0 9 2 0 9 3 01 d d x x 正規表示式的 有不同的意思。是為了提取匹配的字串。表示式中有幾個 就有幾個相應的匹配字串。s 表示連續的空格 製表符 其他空白。是定義匹配的字元範圍。比如 a z...

Python小括號 中括號 大括號和尖括號的含義

在使用python做專案的過程中發現這種語言使用了很多種型別的括號來表達資料型別,常見的有四種,分別是 小括號 中括號 和大括號,也叫做花括號,還有尖括號 其作用也各不相同,分別用來代表不同的python基本內建資料型別。1 python中的小括號 代表tuple元組資料型別,元組是一種不可變序列。...

shell中的大括號和小括號

2009 7 23 13 27 32 在這裡我想說的是幾種shell裡的小括號,大括號結構和有括號的變數,命令的用法,如下 1.2.cmd 3.和 4.5.exp 6.var pattern var pattern var pattern var pattern 現在分述如下 1.shell中變數的...