最近做《cp
rime
rplu
s》《c primer plus》
《cprim
erpl
us》第七章的課後習題,做到習題六的時候看到了匹配標記演算法的應用,覺得很好很實用,開一篇部落格記錄一下。
題目是這樣的:
7 - 6
目標編寫乙個程式讀取輸入,讀到 # 停止,報告 ei 出現的次數。
輸入輸出樣例:
按照我原先的想法,我可能會這樣寫:
if
(ch==
'e'&&
++ch==
'i')
但是,對於這類問題,還可以運用匹配標記演算法進行改進。
**如下:
#include
intmain
(void
)/* 匹配標記為 1 表明前乙個字元e已經匹配 ,
此時 i匹配則計數,並
清除部分匹配標記。*/
break
;default
: halfpair =0;
/* 無論字元e 是否匹配,字元非 e,i
均可以清空部分匹配標記*/}}
printf
("\ntotally exist %d \'ei\' in all char!\n"
,counter)
;printf
("done\n");
return0;
}
這種匹配標記演算法最經典的案例即是識別素數,通過isp
rime
isprime
isprim
e為0或者1來判斷下一步進入**。
for
(int i = datum;i >
1;i--
)/* 可以被1 或其本身之外的數整除,
表示prime為 0 退出素數判別迴圈。*/}if
(is_prime ==1)
/* 依據素數標記 判別區間內數是否列印*/
}
有趣!有趣! 資料結構 串的模式匹配演算法 C語言
1 思路 從主串s s0s1s2s3 sn 1 的第乙個字元開始與子串t t0t1t2 tm 1 的第個字元進行比較,若相等,則繼續比較後續字元 否則從主串s的第 個字元開始重新與子串t的第乙個字元進行比較,若相等,則繼續比較後續字元 否則從主串s的第三個字元開始重新與子串t的第乙個字元進行比較 如...
資料結構 BF演算法 普通模式匹配演算法 及C語言實現
1.判斷兩個串之間是否存在主串與子串的關係,這個過程稱為串的模式匹配。在串的模式匹配過程,子串 t 通常被叫做 模式串 2.普通的模式匹配 bf 演算法 判斷兩個串是否存在子串與主串的關係,最直接的演算法就是拿著模式串,去和主串從頭到尾一一比對,這就是 bf 演算法的實現思想。將提供的模式串 例如 ...
演算法設計與分析 1 1 統計數字問題(C語言版)
問題描述 一本書的頁碼從自然數1開始順序編碼直到自然數n。書的頁碼 按照通常的習慣編排,乙個頁碼內都不包含多餘的前導數字0.例如,第6頁用數字6表示,而不是06或006等 數字計數問題要求給定書的總頁碼n,計算出書的全部頁碼中分別用到多少次數字0,1,9.給定表示書的總頁碼的十進位制數n。變成計算書...