請實現乙個函式用來匹配包含".
.." 和的"∗
*∗" 的正規表示式。模式中的字元".
.."表示任意乙個字元,而 "∗
*∗"表示它前面的字元可以出現任意次(含0次)。在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"abaca"匹配,但與"aa.a"及"ab*a"均不匹配。
每次從字串裡拿出乙個字元和模式串去匹配,那麼如何去匹配乙個字元?
如果模式中的字元ch不是".
..",而字串中的字元也是ch,那麼它們互相匹配。如果模式串中的字元ch是".
.."時,那麼可以匹配字串中的任意乙個字元。當字串中的字元和模式串中的字元相匹配的時候,繼續匹配後面的字元。
當模式中的第二個字元是"∗
*∗「時,情況就比較複雜。這種情況下,有三種可能的匹配情況:
1.模式向後移動兩個字元,這種情況相當於」∗
*∗「和它前面的字元被忽略掉了,因為」∗
*∗"可以匹配字串中的0個字元。
2.如果字串和模式串的第乙個字元相匹配,那麼字串向後移動乙個字元。模式串可以分為兩種情況:向後移動兩個字元,或者保持不變。
如下圖所示ba*ab的模式串。當匹配進入狀態2,並且字串的字元是a時,有兩種選擇:進入狀態3(在模式上向後移動兩個字元),也可以回到狀態2(模式保持不變)。
當字串和模式串都匹配到字串結束,那麼匹配成功。
當模式串匹配結束,但是字串沒有匹配完,那麼匹配失敗。
#include
#include
using
namespace std;
bool
matchcore
(const
char
* str,
const
char
* pattern)
;bool
match
(const
char
* str,
const
char
* pattern)
bool
matchcore
(const
char
* str,
const
char
* pattern)
elseif(
*str ==
*pattern ||
(*pattern ==
'.'&&
*str !=
'\0'))
return
false;}
// ********************測試**********************
void
test
(const
char
* testname,
const
char
* string,
const
char
* pattern,
bool expected)
intmain
(int argc,
char
* argv)
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...