在項目中經常會遇到題目中的需求,例如:公式解析、Json解碼、xml解碼、html代碼處理、代碼檢查、腳本解析。等等等等等等等等。幾乎所有的領域都對《成對字符的匹配》有需要。
下面把自己積累的代碼整理一下,給有用的人做個參考:
下載地址
https://download.csdn.net/download/sqlstar/10282069
************************************************************************************************************************
效果圖:
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
********分隔符********
下載地址
https://download.csdn.net/download/sqlstar/10282069
************************************************************************************************************************
算法分析:
括號匹配,主要是算法是:在查找「右側字符」的時候,留意「左側字符」。用一個計數器,在找到「右側字符」之前,每發現一個「左側字符」這個計數器加一,每發現一個「右側字符」這個計數器減一,計數器爲零的時候,即爲找到了「右側字符」。
************************************************************************************************************************
僞代碼:
/// <summary>
/// 找到配對的座標,匹配不上的時候t_右括號索引-1
/// </summary>
/// <param name="輸入字符串">目標字符串</param>
/// <param name="左括號">「開始標記」</param>
/// <param name="右括號">「結束標記」</param>
/// <param name="開始位置">「起始索引」:應該是「開始標記」的右側位置</param>
/// <param name="最大匹配長度">在指定的範圍內檢索</param>
/// <param name="左括號與右括號的個數差">「開始標記」多出「結束標記」的數量(爲0即說明完整匹配),入口永遠傳0</param>
/// <返回s></返回s>
public int GetSpouse(string 輸入字符串
, string 左括號
, string 右括號
, int 開始位置
, int 最大匹配長度
, ref int 左括號與右括號的個數差)
{
如果 (右括號 等於 "")
{//如果【結束符】是空,那麼直接t_右括號索引最後的位置
返回 輸入字符串.長度 - 1;
}
如果 (左括號 等於 "")
{//如果【開始符】是空,那麼直接t_右括號索引【結束符】的位置
返回 輸入字符串.檢索子串(右括號, 開始位置);
}
//起步就是1個
左括號與右括號的個數差 = 1;
int t_左括號索引 = 0;
int t_右括號索引 = 0;
for (; 開始位置 小於 最大匹配長度; )
{
t_右括號索引 = 輸入字符串.檢索子串(右括號, 開始位置);
t_左括號索引 = 輸入字符串.檢索子串(左括號, 開始位置);
如果 (t_右括號索引 等於 -1)
{
返回負一;
}
否則
{
如果 (t_左括號索引 大於 負一)
{
如果 (t_右括號索引 <= t_左括號索引)//對於【開始符】和【結束符】一樣的時候【結束符】優先
{
左括號與右括號的個數差--;
開始位置 = t_右括號索引 + 右括號.長度;
}
否則
{
左括號與右括號的個數差++;
開始位置 = t_左括號索引 + 左括號.長度;
}
}
否則
{
{
左括號與右括號的個數差--;
開始位置 = t_右括號索引 + 右括號.長度;
}
}
}
如果 (左括號與右括號的個數差 等於 零)
{
返回 t_右括號索引;
}
}
返回 負一;
}
************************************************************************************************************************
下載地址
https://download.csdn.net/download/sqlstar/10282069
下載地址
https://download.csdn.net/download/sqlstar/10282069
下載地址
https://download.csdn.net/download/sqlstar/10282069