在一篇英文文章中查詢指定的人名,人名使用二十六個英文本母(可以是大寫或小寫)、空格以及兩個萬用字元組成(?),萬用字元 「 * 」 表示零個或多個任意字母,萬用字元「?」表示乙個任意字母。如:「j* smi??」 可以匹配「john smith」 .
當pname中的字元不是萬用字元時,直接與ptext的值比較,若相等,則pname++,ptext++再進行比較,若不等,則表明當前匹配失敗,需要將ptext後移一位然後再進行匹配;
當pname中的字元是萬用字元 * 時,當前有兩種情況:一種是直接讓pname所對應的值與ptext++所對應的值比較,一種情況是直接讓pname++與ptext對應的值進行比較,這裡顯然是要使用遞迴方式的。
當pname中的萬用字元是 ? 時,直接忽略掉這次比較結果,讓pname++和ptext++,然後再進行比較。
一直按照上面的比較方式進行比較,直到pname所指值為』\0』或者ptext所指值為』\0』結束即可。
說的那麼複雜,實際匹配函式如下所示:
bool match(char *ptext, char *pname)
if(*ptext == '\0')
else
return false;
}if(*pname != '*' && *pname != '?') else
}
匹配函式完成過後,就需要真正完成掃瞄函式,若存在匹配則返回匹配過後的值,若不存在匹配,則不返回,匹配函式是針對已經給定位置的情況,那麼掃瞄函式就是針對ptext,乙個字元乙個字元開始掃瞄:
void scan(char* psztext, char* pszname)
cout << endl;
}} else
}}
字串匹配
題目描述 讀入資料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...