標籤:

正則表達式匹配

正則表達式匹配

匹配包含* .的正則表達式:

模式串"."表示任意一個字元,"*"表示它前面的字元可以出現任意次。

思路:

1.當模式串中的第二個字元不是"*"的時候,

如果字元串中的第一個字元和模式中的第一個字元匹配,那麼,

字元串和模式串都向右移動一位。然後匹配剩餘的字元串和模式。

如果字元串的第一個字元和模式中的第一個字元不匹配,返回失敗。

2.當模式中的第二個字元是"*"的時候,

- 首字元字元串有0個,模式有,則字元串不變,模式+2

- 首字元字元串有1個,模式有,則字元串+1,模式+2

- 首字元字元串有2個以及2個以上,模式有2,則字元串+1,模式不變

參考代碼:

#include <stdio.h>int core(char* str,char* pattern){ if(*str == && *pattern == ) return 1; if(*str != && *pattern == ) return 0; if(*(pattern + 1) == *) { if(*str == *pattern || (*pattern == . && *str != )) return core(str + 1,pattern + 2)//1個 || core(str + 1,pattern)//2個以及2個以上 || core(str,pattern + 2);//0個 else return core(str,pattern + 2);//0個 } if(*str == *pattern || (*pattern == . && *str != )) return core(str + 1,pattern + 1);// !* return 0;}int match(char* str,char* pattern){ if(!str || !pattern) return 0; return core(str,pattern);}int main(){ char* str = "abcdef"; char* pattern = "i*ab.d*e*f"; int res = match(str,pattern); printf("%d
",res); return 0;}

推薦閱讀:

快速排序
對稱的二叉樹
旋轉數組的最小數字
二叉堆
記錄演算法

TAG:演算法 | 筆試 |