OpenJudge 帶萬用字元的字串匹配
6252:帶萬用字元的字串匹配
描述
萬用字元是一類鍵盤字元,當我們不知道真正字元或者不想鍵入完整名字時,常常使用萬用字元代替一個或多個真正字元。萬用字元有問號(?)和星號(*)等,其中,“?”可以代替一個字元,而“*”可以代替零個或多個字元。
你的任務是,給出一個帶有萬用字元的字串和一個不帶萬用字元的字串,判斷他們是否能夠匹配。
例如,1?456 可以匹配 12456、13456、1a456,但是卻不能夠匹配23456、1aa456;
2*77?8可以匹配 24457798、237708、27798。
輸入
輸入有兩行,每行為一個不超過20個字元的字串,第一行帶萬用字元,第二行不帶萬用字元
輸出
如果兩者可以匹配,就輸出“matched”,否則輸出“not matched”
樣例輸入
1*456?
11111114567
樣例輸出
matched
模擬字串匹配的過程,注意下面幾個測試樣例
123*45*6
1237894523454336
*?
123456
2*77?8
24457798
以下就是滿分的AC程式碼:
#include <stdio.h>
#include <string.h>
char str1[21];
char str2[21];
char temp[21];
char* mystrstr(char* s1,char* s2)
{
int i,j;
int len1=strlen(s1);
int len2=strlen(s2);
for(i=0;i<len1;i++)
{
for(j=0;j<len2&&i<len1;)
{
if(s1[i]==s2[j])
{
i++;
j++;
}
else if(s2[j]=='?')
{
i++;
j++;
}
else break;
}
if(j==len2)
{
return (s1+i-len2);
}
}
return NULL;
}
int main()
{
scanf("%s %s",str1,str2);
int len1=strlen(str1);
int len2=strlen(str2);
int i=0;
int j=0;
int flag=1;
while(i<len1&&j<len2)
{
if(str1[i]=='*')
{
int cnt=0;
int p1=(++i);
if(i==len1)
{
j=len2;
}
else
{
int p2=0;
while(str1[p1]!='*'&&str1[p1]!='\0')
{
temp[p2++]=str1[p1++];
}
temp[p2]='\0';
char* p3=str2+j;
while(mystrstr(p3,temp))
{
p3=mystrstr(p3,temp);
p3+=strlen(temp);
}
j=(p3-str2);
i+=strlen(temp);
}
}
else if(str1[i]=='?')
{
i++;
j++;
}
else{
if(str1[i]==str2[j])
{
i++;
j++;
}
else
{
flag=0;
break;
}
}
}
while(i<len1)
{
if(str1[i]=='*') i++;
else
{
flag=0;
break;
}
}
if(i==len1&&j==len2&&flag) printf("matched\n");
else printf("not matched\n");
return 0;
}
相關文章
- Python3 - 用Shell萬用字元匹配字串Python字元字串
- HDU5716 : 帶可選字元的多字串匹配字元字串匹配
- 正則匹配指定字元之前的字串字元字串
- LeetCode 44 萬用字元匹配LeetCode字元
- 帶萬用字元的LIKE子句字元
- 正規表示式如何匹配不包含指定字元的字串字元字串
- lintcode 萬用字元匹配 ac程式碼字元C程式
- 用trim去掉字串末尾的任意字元字串字元
- 字串匹配字串匹配
- py匹配字串中間的字串字串
- mysql 查詢,字串帶著空格也能匹配上MySql字串
- 面試常遇到的萬用字元匹配的兩個小問題總結面試字元
- 【字串匹配】KMP字串匹配KMP
- 字串和字元的操作字串字元
- Zsh 開發指南(四): 字串處理之萬用字元字串字元
- 字串匹配問題字串匹配
- LeetCode刷題記126-44. 萬用字元匹配LeetCode字元
- BZOJ4259: 殘缺的字串(FFT 字串匹配)FFT字串匹配
- 順序結構儲存串實現串萬用字元匹配的演算法字元演算法
- jQuery匹配具有指定字元的選擇器jQuery字元
- 字串匹配模式問題字串匹配模式
- SQL Server字串左匹配SQLServer字串
- Bitset 亂搞字串匹配字串匹配
- Vijos1680距離/openjudge2988計算字串的距離[DP]字串
- 字串-字元編碼字串字元
- Swift:字元和字串Swift字元字串
- js實現的用指定字元每隔指定位數分割字串JS字元字串
- Ubuntu萬用字元的使用Ubuntu字元
- java的classpath萬用字元Java字元
- 正規表示式匹配以指定字元開頭和結尾的字元字元
- Swift 語言的字串與字元Swift字串字元
- 匹配雙位元組字元的正規表示式字元
- jquery匹配具有指定字元的選擇器功能jQuery字元
- KMP字串模式匹配詳解KMP字串模式
- 【學習筆記】字串匹配筆記字串匹配
- 字串——正規表示式匹配字串
- perl 匹配某行後新增字串字串
- CoffeeScript攻略3.9:匹配字串字串