題目描述
問題描述:在計算機中,萬用字元一種特殊語法,廣泛應用於檔案搜尋、資料庫、正規表示式等領域。現要求各位實現字串萬用字元的演算法。
要求:實現如下2個萬用字元:
*:匹配0個或以上的字元(字元由英文本母和數字0-9組成,不區分大小寫。下同)
?:匹配1個字元
輸入:萬用字元表示式;
一組字串。
輸出:返回匹配的結果,正確輸出true,錯誤輸出false
輸入描述:
先輸入乙個帶有萬用字元的字串,再輸入乙個需要匹配的字串
輸出描述:
返回匹配的結果,正確輸出true,錯誤輸出false
示例1
輸入
te?t*.*
txt12.xls
輸出false
解題思路:
本題可以通過遞迴求解。從前向後一次匹配,遇到相同字元,都向後移動乙個字元,如果萬用字元遇到"?",則不需匹配,自動跳過乙個字元,如果萬用字元遇到"*",則可以匹配任意多個字元,包括0個,此時可以有三種選擇,
匹配0個,萬用字元向後移動乙個字元,字串不動。
匹配1個,萬用字元和字串都向後移動乙個 字元。
匹配多個,萬用字元不動,字串向後移動乙個字元。
遞迴的終止條件:萬用字元或者字串遇到』\0』。當他們同時結束。
**示例:
#include
#include
using
namespace std;
bool
match
(const
char
* s1,
const
char
* s2)
//兩個字串有乙個先結束,則返回falseif(
*s1 ==
'\0'
||*s2 ==
'\0'
)//遇到?號,匹配乙個字元,跳過乙個位置if(
*s1 ==
'?')
// 遇到*號,匹配0個(str不挪動),1個(兩者都向前挪動乙個字元)或多個(str向前挪動乙個字元)
elseif(
*s1 ==
'*')
elseif(
*s1 ==
*s2)
return
false;}
intmain()
else
cout <<
"false"
<< endl;
}return0;
}
每日一題 87 字串過濾
題目來自網上 題目描述 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。要求實現函式 void stringfilter const char pinputstr,long linputlen,char poutputstr...
每日一題 12 字串壓縮
題目描述 對字串進行rle壓縮,將相鄰的相同字元,用計數值和字元值來代替。例如 aaabccccccddeee,則可用3a1b6c2d3e來代替。輸入描述 輸入為a z,a z的字串,且字串不為空,如aaabccccccddeee 輸出描述 壓縮後的字串,如3a1b6c2d3e 思路 建立乙個變數,...
每日一題 38字串相乘
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 class solution string a...