當前位置:首頁 » 操作系統 » 字元串通配符演算法

字元串通配符演算法

發布時間: 2022-07-26 21:51:46

⑴ 什麼是通配符 這道題是什麼意思、、請高手解釋一下、、

通配符是一種特殊語句,主要有星號(*)和問號(?),用來模糊搜索文件。當查找文件夾時,可以使用它來代替一個或多個真正字元;當不知道真正字元或者懶得輸入完整名字時,常常使用通配符代替一個或多個真正的字元。 實際上用「*Not?paOd」可以對應Notpad\MyNotpad【*可以代表任何文字】;Notpad\Notepad【?僅代表單個文字】;Notepad\Notepod【ao代表a與o里二選一】,其餘以此類推。

⑵ 判斷兩個字元串是否匹配,其中字元串中包括通配符*或(串)。*代表0個或多個字元代表一個字元

給你一個用遞歸演算法寫的字元串匹配函數,
非常精練,你可以參考一下,希望能看懂。
輸入:
s,指向含通配符的匹配字元串,
d,指向要匹配的字元目標
返回值:
1,匹配一致
0,不能匹配

int StrMatch(const char *s,const char *d)
{ for(;*s;s++,d++)
{ if(*s=='*')
{ for(s++;;d++)
{ if(StrMatch(s,d))return 1;
if(*d==0)return 0;
}
}
if(*d==0)return 0;
if(*s!='?'&&*s!=*d)return 0;
}
return !(*d);
}

⑶ 做了個帶通配符 查找字元串的題,演算法有錯誤,幫忙看

問題沒說清楚。
如果是把y中的問號,用x中的對應單元的字元替代,可以這樣寫:

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int a,b,c=0,z[100];
char x[100],y[100],m[100];
int i,j,k;

scanf("%s %s", &x[0],&y[0]);
a=strlen(x);
b=strlen(y);

for(j=0;j<b;j++)
{
z[j]= -1;
if (strncmp(&y[0]+j,"?",1) == 0) {
z[j]=j;
strncpy(&y[0]+j, &x[0]+j,1);
};
}
printf("%s ",y);
}

輸入:
1234567890 abc?ef?h
輸出:
abc4ef7h

如果要截取某一長度,只要讓y[長度]這個單元為 "\0" -- 字元串結束符就可以了。

⑷ 用python解一道通配符匹配的演算法題

假設輸入的字元串為s,匹配串為p,代碼如下

classSolution(object):
defisMatch(self,s,p):
"""
:types:str
:typep:str
:rtype:bool
"""
sIndex,pIndex=0,0
sLen=len(s)
pLen=len(p)
sPrevIndex,pPrevIndex=1,pLen
whilesIndex<sLen:
#當兩個串對應位置字母可以等價時,各自索引均向後
ifpIndex<pLenand(s[sIndex]==p[pIndex]orp[pIndex]=='?'):
sIndex+=1
pIndex+=1
#當模式串為*時,先以匹配0個的方式暫時匹配
elifpIndex<pLenandp[pIndex]=='*':
sPrevIndex=sIndex+1
pPrevIndex=pIndex
pIndex+=1
#當暫時匹配失敗時,以匹配多1個的方式繼續匹配
elifpPrevIndex<pLen:
sIndex,pIndex=sPrevIndex,pPrevIndex
#匹配失敗
else:
returnFalse
#看模式串剩下的字母是否均為*
foriinrange(pIndex,pLen):
ifp[i]!='*':
returnFalse
returnTrue

⑸ ·代表任意一個字元,*代表任意一串字元,判斷兩個字元串是否匹配

java代碼:


publicstaticvoidmain(String[]args){
System.out.println(isMatch("asdfgvbbnchb","as*bnc.b"));
}

/**
*動態規劃法判斷普通字元串是否與通配符字元串匹配。
*
*<pre>
*演算法思路:
*設s為普通字元串,p為通配符字元串,字元串中字元編號以0起始。
*申請布爾型數組dp[s.length+1][p.length+1]。
*1.dp[0][0]表示s為空串、p為空串時是否匹配,顯然為true,dp[0][0]=true。
*2.dp[0][j+1],0=<j<p.length,表示s為空串時,s與p[0..j]是否匹配,
*當dp[0][j]=true且p[j]='*'時,dp[0][j+1]=true。
*如果dp[0][j]=false,即p[0..j-1]已經不能與空串匹配了,顯然加上p[j]
*也不能匹配。
*如果p[j]!='*',則p[j]必須與一個字元匹配,而s為空串,顯然不能匹配。
*3.dp[i+1][j+1]表示s[0..i]與p[0..j]是否匹配。
*3.1如果p[j]='*',那麼可以有兩種匹配方式:
*方式1.p[j]與s[i]匹配,s[i]被匹配掉後,還需判斷s[0..i-1]是否與
*p[0..j]匹配,故dp[i+1][j+1]=dp[i][j+1]。
*方式2.p[j]不與s[i]匹配,這時還需判斷s[0..i]是否與p[0..j-1]匹配,
*故dp[i+1][j+1]=dp[i+1][j]。
*綜合兩種情況,dp[i+1][j+1]=dp[i][j+1]||dp[i+1][j]。
*3.2如果p[j]='.',則p[j]必須和s[i]匹配,還需判斷s[0..i-1]是否與
*p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。
*3.3如果p[j]為其他字元並且與s[i]相同,則p[j]必須和s[i]匹配,還需判斷
*s[0..i-1]是否與p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。
*這種情況可以與情況3.2合並。
*最終dp[s.length][p.length]即表示s與p是否匹配。
*</pre>
*
*@params
*普通字元串。
*@paramp
*通配符字元串。
*@return如果普通字元串與通配符字元串匹配則返回true,否則返回false。
*/
publicstaticbooleanisMatch(Strings,Stringp){
boolean[][]dp=newboolean[s.length()+1][p.length()+1];
dp[0][0]=true;
for(intj=0;j<p.length();j++){
if(dp[0][j]&&p.charAt(j)=='*'){
dp[0][j+1]=true;
}
}
for(inti=0;i<s.length();i++){
for(intj=0;j<p.length();j++){
if(p.charAt(j)=='*'){
dp[i+1][j+1]=dp[i][j+1]||dp[i+1][j];
}elseif(p.charAt(j)=='.'||p.charAt(j)==s.charAt(i)){
dp[i+1][j+1]=dp[i][j];
}
}
}
returndp[s.length()][p.length()];
}

⑹ 在Word編輯中,模式匹配查找中能使用的通配符是

在Word編輯中,模式匹配查找中能使用的通配符是:*和?。

模式匹配,數據結構中字元串的一種基本運算,給定一個子串,要求在某個字元串中找出與該子串相同的所有子串,這就是模式匹配。

假設P是給定的子串,T是待查找的字元串,要求從T中找出與P相同的所有子串,這個問題成為模式匹配問題。P稱為模式,T稱為目標。如果T中存在一個或多個模式為P的子串,就給出該子串在T中的位置,稱為匹配成功;否則匹配失敗。

(6)字元串通配符演算法擴展閱讀

演算法思想:從目標串的的第一個字元起與模式串的第一個字元比較,若相等,則繼續對字元進行後續的比較,否則目標串從第二個字元起與模式串的第一個字元重新比較,直至模式串中的每個字元依次和目標串中的一個連續的字元序列相等為止,此時稱為匹配成功,否則匹配失敗。

若模式子串的長度是m,目標串的長度是n,這時最壞的情況是每遍比較都在最後出現不等,即沒變最多比較m次,最多比較n-m+1遍,總的比較次數最多為m(n-m+1),因此樸素的模式匹配演算法的時間復雜度為O(mn)。

樸素的模式匹配演算法中存在回溯,這影響到匹配演算法的效率,因而樸素的模式匹配演算法在實際應用中很少採用。在實際應用主要採用無回溯的匹配演算法,KMP演算法和BM演算法均為無回溯的匹配演算法。

加密後的字元串最後有兩個「==」是什麼加密演算法

Base64是網路上最常見的用於傳輸8Bit位元組碼的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。

1,Base64使用US-ASCII子集的64個字元,即大小寫的26個英文字母,0-9,+,/。

2,編碼總是基於3個字元,每個字元用8位二進製表示,因此一共24位,再分為4四組,每組6位,表示一個Base64的值。

3,Base64值為0就是A,為27的就是b。這樣,每3個字元產生4位的Base64字元。如果被加密的字元串每3個一組,還剩1或2個字元,使用特殊字元"="補齊Base64的4字。

(7)字元串通配符演算法擴展閱讀:

應用

Base64編碼可用於在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的一個標識符(一般為128-bit的UUID)編碼為一個字元串,用作HTTP表單和HTTP GET URL中的參數。

在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,採用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

然而,標準的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標准Base64中的「/」和「+」字元變為形如「%XX」的形式,而這些「%」號在存入資料庫時還需要再進行轉換。

因為ANSI SQL中已將「%」號用作通配符。

為解決此問題,可採用一種用於URL的改進Base64編碼,它不僅在末尾去掉填充的'='號,並將標准Base64中的「+」和「/」分別改成了「-」和「_」。

這樣就免去了在URL編解碼和資料庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了資料庫、表單等處對象標識符的格式。

另有一種用於正則表達式的改進Base64變種,它將「+」和「/」改成了「!」和「-」,因為「+」,「/」以及前面在IRCu中用到的「[」和「]」在正則表達式中都可能具有特殊含義。

此外還有一些變種,它們將「+/」改為「_-」或「._」(用作編程語言中的標識符名稱)或「.-」(用於XML中的Nmtoken)甚至「_:」(用於XML中的Name)。

熱點內容
php怎麼反編譯 發布:2025-01-19 14:10:54 瀏覽:590
加密貨幣交易平台排名 發布:2025-01-19 13:58:21 瀏覽:741
紅綠燈的編程 發布:2025-01-19 13:57:37 瀏覽:113
老男孩linux教程 發布:2025-01-19 13:44:48 瀏覽:941
買車怎麼區分車配置 發布:2025-01-19 13:44:45 瀏覽:242
丟失緩存視頻 發布:2025-01-19 13:44:09 瀏覽:183
C語言tp 發布:2025-01-19 13:26:20 瀏覽:107
手機qq改變存儲位置 發布:2025-01-19 13:25:17 瀏覽:83
吃解壓海鮮 發布:2025-01-19 13:23:50 瀏覽:820
sql子表 發布:2025-01-19 13:23:11 瀏覽:334