题目:字符串通配符
描述 | |
---|---|
知识点 | 字符串 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 先输入一个带有通配符的字符串,再输入一个需要匹配的字符串 |
输出 | 返回匹配的结果,正确输出true,错误输出false |
样例输入 | te?t*.* txt12.xls |
样例输出 | false |
#include<iostream>
using namespace std;
#include<string>
bool true_same(char a,char b)
{
if(isalpha(a) && isalpha(b))
{
char c=a;
char d=b;
if(isupper(a)) c=(char)tolower(a);
if(isupper(b)) d=(char)tolower(b);
if(c==d) return true;
else return false;
}
else if(a==b)
return true;
return false;
}
bool pipei_char(char *input, char *pput)
{
char *p=input;//通配字符串
char *q=pput;//匹配字符串
while(*p!='\0')
{
if((true_same(*p,*q)) || (*p=='?'))
{
p++;
q++;
}
else
if(*p=='*')
{
q++; //匹配串后移,通配串不动
char *p1=p+1;
if(*p1=='\0' || (!true_same(*p1,*q)) ) q++;
//else if((*p1!=*q)) q++;
else p=p+2;
}
else
return false;
}
return true;
}
int main()
{
//char in1[50]="T?t*.*";
//char in2[50]="txt12.xls";
char in1[50];
char in2[50];
gets_s(in1);
gets_s(in2);
if(pipei_char(in1, in2)) cout<<"true";
else cout<<"false";
return 0;
}