字串匹配

2021-07-01 18:51:58 字數 1975 閱讀 8706

這一道題類似正規表示式

實現支援如下特性的字串匹配程式: 

(1)  』?』可匹配任意字元 

0 次或者 

1 次,如

「a?」

可匹配」a」

或者」  」

;(2)  』.』可匹配任意單個字元

; (3)  』*』可匹配任意字元任意多次,如

「a*」

可匹配」  」,」a」,」

aa」… 

(4)  『+』可匹配任意字元至少 

1 次,如

」a+」

可匹配」a」,」aa」…

(該項可選

) 輸入:

模式字串和待匹配字串,如

」a*b+c.d」

和」aabced」,

整個待匹配字串均要參與匹配; 

輸出:返回布林值,表示是否能匹配上,如對於上述輸入而言,返回

true。

#include #include #include #include #include #define inf 10000

using namespace std;

bool match(string a, string b)

else if (!b.empty() && a.empty()) // 待匹配字串未空, 模式字串已空, 不可匹配

else if (b.empty() && !a.empty()) // 待匹配字串已空, 模式字串未空, 有可能能匹配

goto end;

} char chab = b.back();

while (!b.empty() && chab == b.back()) //取出待匹配字串尾部的只含一種字元的字串

//取出模式字串直到遇見不同的字母

while (!a.empty() && (a.back() == chab || a.back() == '.' ||

a.back() == '+' || a.back() == '*'

|| a.back() == '?'))

if (pattern.back() == '+' || pattern.back() == '*' || pattern.back() == '?')

//這幾個符號屬於前乙個字元, 歸還

end:

int dots = 0;

while (!pattern.empty() && pattern.back() == '.') //將'.'分離出, 它是可變的引數

int min = 0, max = 0;

while (!pattern.empty()) //計算取出的模式字串的可變長度

else if (pattern.front() == '*')

}else if (pattern.front() == '+')

min++;

} else if (pattern.front() == '.')

}else// if (pattern.front() == chab)

}pattern.pop_front();

} bool result = false;

for (int i = 0; i < dots; i++)

for (int i = 0; i <= dots; i++) //根據加'.'的多少, 進行分叉

result |= match(a, b);

if (!a.empty()) a.pop_back();

} return result;

}int main()

f >> str;

/*cin >> pattern;

cin >> str;*/

result = match(pattern, str);

if (result)

else cout << "false" << endl;

} return 0;

}

字串匹配

題目描述 讀入資料string 然後讀入乙個短字串。要求查詢string 中和短字串的所有匹配,輸出行號 匹配字串。匹配時不區分大小寫,並且可以有乙個用中括號表示的模式匹配。如 aa 123 bb 就是說aa1bb aa2bb aa3bb都算匹配。輸入 輸入有多組資料。每組資料第一行輸入n 1 n ...

字串匹配

time limit 1000ms memory limit 65536k 給定兩個字串string1和string2,判斷string2是否為string1的子串。輸入包含多組資料,每組測試資料報含兩行,第一行代表string1,第二行代表string2,string1和string2中保證不出現...

字串匹配

面試題 給一串很長的字串,要求找到符合要求的字串,例如目的串 123 1 3 2 12 3 這些都要找出來 思路一 利用兩層迴圈,逐個查詢目的串中的字元,比如先查詢字元 1 是否在長字串中,再查詢 2 是否在長字串中,直到目的串遇到 0 是 include include include int m...