網上有乙個左右法則,其實左右法則適合程式分析,不適合人。
我總結了對人來說乙個更簡單的法則:模式匹配. 演算法如下:
1.找到變數名。程式不容易做,人比較容易。
2.除開變數名後,是它的型別宣告,可能有四種複雜, 四種簡單模式(為了形式上完整)
其中空格是變數的位置, ???可能是比較複雜東西。
???(* )??? 變數是指標
???( )???或??? ??? 變數是值或陣列, 前一種形式括號是多餘的.
???(* (???))??? 變數是函式宣告,返回型別是指標,指向括號外面的部分
???(* [???])??? 變數是陣列,陣列型別是指標,指向括號外面的型別
type ; 簡單變數type = char/short/long/int/float/struct/union/emnu等
type * 指標,指向type
type [xx]??? type的陣列,多維陣列也可以再分析一步,也可以直接得結果.
type (???) 函式
3.把已經識別的部分看成變數
4.如果有餘下的部分, 返回第2步.
例如:int (*ff(int)) (int *,int); => 結果
step 1. 找到ff. 變數ff是...
step 2. 滿足???(* (???))??? 函式宣告, 引數是(int), 返回值是指標, 指向...
step 3. 除去已經識別部分int (int *, int)
step 2. 滿足type (???) 函式, 引數是(int*, int)
int (*register (int (*pf)(const char *, const char *))) (const char *, const char *)
step 1.找到pf, 這個是找錯了,不過沒關係.
step 2.滿足???(*)???, pf是指標,指向...
step 3.剩下int (*register (int ^(const char*, const char*)))( const char*, const*)
我用^標出的變數的位置,
step 2.滿足??? (???), 是函式
step 3.剩下int (*register (^))(const char*, const*),
step 2.滿足???( )???, 說明是型別, 但注意pf是函式,函式不能再是乙個值或陣列.所以pf變數其實
不是真正的變數, 所以需要退回上一步,再找一下變數這次可以找出register
step 1.找出register
step 2.除出register得到int (* (pf))(const char*, const*), register是函式宣告, 返回值指向...
step 3.剩下int (const char*, const*) 是函式
-----
題外話,如果先找到register就比較簡單,直接說明它是函式, 返回值是...
float ( * ( * e[10])(int &) ) [5];
變數e, 第一次找到???(* [???])???, e是陣列, 成員是...
float ( * (int &) ) [5]; +++ ???(* (???))???, 函式指標, 返回型別是指標, 指向
float [5]; +++ float陣列
模式匹配 更快的Boyer Moore演算法
前一篇中介紹了字串kmp演算法,其利用失配時已匹配的字元資訊,以確定下一次匹配時模式串的起始位置。本文所要介紹的boyer moore演算法是一種比kmp更快的字串匹配演算法,它到底是怎麼快的呢?且聽下面分解。不同於kmp在匹配過程中從左至右與主串字元做比較,boyer moore演算法是從模式串的...
node使用 glob匹配模式
匹配符說明 匹配檔案路徑中的0個或多個字元,但不會匹配 除非 出現在末尾 匹配路徑中的0個或多個目錄及其子目錄 匹配檔案路徑中的乙個字元,不匹配 出現在規則的開頭,表示取反。即匹配不命中後面規則的檔案 匹配方括號 現的字元中的任意乙個 可以讓多個規則用 逗號分隔,起到或者的作用 匹配n1到n3之間的...
使用SV實現模式匹配
模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,...