模式匹配是資料結構中字串的一種基本運算,給定乙個子串,要求在某個字串中找出與該子串相同的所有子串,這就是模式匹配。
假設p是給定的子串,t是待查詢的字串,要求從t中找出與p相同的所有子串,這個問題成為模式匹配問題。p稱為模式,t稱為目標。如果t中存在乙個或多個模式為p的子串,就給出該子串在t中的位置,稱為匹配成功;否則匹配失敗。
**如下(示例):
function match
(string s1,s2)
;int l1,l2;
l1 = s1.
len();
l2 = s2.
len();
match =0;
if( l2 > l1 )
return0;
for(
int i =
0;i < l1 - l2 +
1; i ++)if
( s1.
substr
(i,i+l2 -1)
== s2)
return1;
endfunction
程式舉例:
program main;
string str1,str2;
int i;
initial
begin
str1 =
"this is first string"
;str2 =
"this";if
(match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;str1 =
"this is first string"
;str2 =
"first";if
(match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;str1 =
"this is first string"
;str2 =
"string";if
(match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;str1 =
"this is first string"
;str2 =
"this is ";if
(match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;str1 =
"this is first string"
;str2 =
"first string";if
(match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;str1 =
"this is first string"
;str2 =
"first string "
;// one space at endif(
match
(str1,str2)
)$display
(" str2 : %s : found in :%s:"
,str2,str1)
;end
endprogram
SV 中巨集的使用
在sv中,養成使用巨集的習慣可以大大提高code 的可閱讀性,讓我們從簡單重複的工作中脫離出來,聚焦技術方法本身或者硬體的理解上,可以有效的提高我們的驗證效率。在我們驗證的過程或多或少的會遇到在tb test中使用巨集的方法,當然我們是看的懂的,但是我們一定要思考這個tb test為什麼要這麼寫,有...
模式匹配 關於模式匹配的演算法實現2
參照我上篇部落格,只不過多了乙個識別率的演算法而已,還是參考歸併排序寫的,很簡單。上篇部落格位址 很多的解釋都在 裡面了,各位看看就明白了 author seen time 2015 09 20 include include include using namespace std struct p...
SV 使用斷言(Assertion)的優點
朋友們,這次我決定寫關於斷言的文章。我個人認為斷言是非常方便和非常有用的資產,當我們談 能驗證時,即在給定的rtl設計中發現缺陷 確保驗證完整性。它是一種令人驚嘆的驗證技術,用較少的 提供了如此多的好處。如果你閱讀了我之前關於斷言的文章 關於斷言的基礎知識 我們在這裡討論了乙個斷言示例,並與相應的v...