#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int MatchesPattern( const char * s, const char * pattern)
{
size_t prefixSize
= strcspn ( pattern
, "*?" ) ; if ( memcmp ( s
, pattern
, prefixSize
) != 0 ) return 0 ;
pattern += prefixSize;
s += prefixSize;
if ( * pattern == '?' )
{
return * s && MatchesPattern( s + 1 , pattern + 1 ) ;
}
if ( * pattern == '*' )
{
while ( * pattern == '*' )
++ pattern;
if ( !* pattern)
return 1 ;
while ( * s)
{
if ( MatchesPattern( s, pattern) )
return 1 ;
++ s;
}
return !* pattern;
}
return !* s;
}
int main( void ) {
char s[ 0x100 ] ;
char pattern[ 0x100 ] ;
char resultLine[ 0x100 ] ;
int failCount = 0 ;
{
int expected
= atoi ( resultLine
) ; int result = MatchesPattern( s, pattern) ;
if ( expected != result)
{
++ failCount;
printf ( "%s\n %s\n %s\n -------\n " , pattern
, s
, result
? "Match" : "do not match" ) ; }
}
return failCount? 1 : 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IE1hdGNoZXNQYXR0ZXJuKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCnsKCXNpemVfdCBwcmVmaXhTaXplID0gc3RyY3NwbihwYXR0ZXJuLCAiKj8iKTsKCWlmIChtZW1jbXAocywgcGF0dGVybiwgcHJlZml4U2l6ZSkgIT0gMCkKCQlyZXR1cm4gMDsKCglwYXR0ZXJuICs9IHByZWZpeFNpemU7CglzICs9IHByZWZpeFNpemU7CgoJaWYgKCpwYXR0ZXJuID09ICc/JykKCXsKCQlyZXR1cm4gKnMgJiYgTWF0Y2hlc1BhdHRlcm4ocyArIDEsIHBhdHRlcm4gKyAxKTsKCX0KCWlmICgqcGF0dGVybiA9PSAnKicpCgl7CgkJd2hpbGUgKCpwYXR0ZXJuID09ICcqJykKCQkJKytwYXR0ZXJuOwoJCWlmICghKnBhdHRlcm4pCgkJCXJldHVybiAxOwoJCXdoaWxlICgqcykKCQl7CgkJCWlmIChNYXRjaGVzUGF0dGVybihzLCBwYXR0ZXJuKSkKCQkJCXJldHVybiAxOwoJCQkrK3M7CgkJfQoJCXJldHVybiAhKnBhdHRlcm47Cgl9CglyZXR1cm4gISpzOwp9CgppbnQgbWFpbih2b2lkKSB7CgljaGFyIHNbMHgxMDBdOwoJY2hhciBwYXR0ZXJuWzB4MTAwXTsKCWNoYXIgcmVzdWx0TGluZVsweDEwMF07CglpbnQgZmFpbENvdW50ID0gMDsKCXdoaWxlIChnZXRzKHBhdHRlcm4pICYmIGdldHMocykgJiYgZ2V0cyhyZXN1bHRMaW5lKSkKCXsKCQlpbnQgZXhwZWN0ZWQgPSBhdG9pKHJlc3VsdExpbmUpOwoJCWludCByZXN1bHQgPSBNYXRjaGVzUGF0dGVybihzLCBwYXR0ZXJuKTsKCQlpZiAoZXhwZWN0ZWQgIT0gcmVzdWx0KQoJCXsKCQkJKytmYWlsQ291bnQ7CgkJCXByaW50ZigiJXNcbiVzXG4lc1xuLS0tLS0tLVxuIiwgcGF0dGVybiwgcywgcmVzdWx0PyJNYXRjaCI6ImRvIG5vdCBtYXRjaCIpOwoJCX0KCX0KCglyZXR1cm4gZmFpbENvdW50PzE6MDsKfQo=
stdin
CgoxCgphc2QKMApzYW1lTm9QYXR0ZXJuCnNhbWVOb1BhdHRlcm4KMQpkaWZmcmVudApkaWZmcmVudE5vIHBhdHRlcm4KMAoqCndpbGQgIG1hdGNoCjEKdyoKd2lsZCAgbWF0Y2ggcHJlZml4IG9rCjEKeCoKd2lsZCAgbWF0Y2ggcHJlZml4IGZhaWwKMAoqT2sKd2lsZCAgbWF0Y2ggc3VmZml4IE9rCjEKKmxzCndpbGQgIG1hdGNoIHN1ZmZpeCBmYWlsCjAKP2luZ2xlIG1hdGNoIHByZWZpeCBPSwpzaW5nbGUgbWF0Y2ggcHJlZml4IE9LCjEKP2luZ2xlIG1hdGNoIHByZWZpeCBmYWlsCnNpbmdsZSBtYXRjaCBwcmVmaXggZmFpbCEKMApzaW5nbGUgbWF0Y2ggc3VmZml4IE8/CnNpbmdsZSBtYXRjaCBzdWZmaXggT2sKMQpzaW5nbGUgbWF0Y2ggc3VmZml4IGZhPwpzaW5nbGUgbWF0Y2ggc3VmZml4IGZhaWwKMApzaW5nbGUgbWF0Y2ggc3VmZml4IGxlbmd0aCBmYWlsPwpzaW5nbGUgbWF0Y2ggc3VmZml4IGxlbmd0aCBmYWlsCjAKc2luZ2xlIG1hdGM/IGluc2lkZSBvawpzaW5nbGUgbWF0Y2ggaW5zaWRlIG9rCjEKd2lsZCBtYXRjaCAqb2sKd2lsZCBtYXRjaCBpbiB0aGUgbWlkZGxlIG9rCjEKd2lsZCBtYXRjaCAqIG5vdCBvawp3aWxkIG1hdGNoIGluIHRoZSBtaWRkbGUgZmFpbAowCndpbGQgbWF0Y2ggLSogZmFpbAp3aWxkIG1hdGNoIGluIHRoZSBtaWRkbGUgZmFpbAowCnRvIHdpbGQgKiBpbiB0aGUgKk9rCnRvIHdpbGQgbWF0Y2hlcyBpbiB0aGUgbWlkZGxlIE9rCjE=
1
asd
0
sameNoPattern
sameNoPattern
1
diffrent
diffrentNo pattern
0
*
wild match
1
w*
wild match prefix ok
1
x*
wild match prefix fail
0
*Ok
wild match suffix Ok
1
*ls
wild match suffix fail
0
?ingle match prefix OK
single match prefix OK
1
?ingle match prefix fail
single match prefix fail!
0
single match suffix O?
single match suffix Ok
1
single match suffix fa?
single match suffix fail
0
single match suffix length fail?
single match suffix length fail
0
single matc? inside ok
single match inside ok
1
wild match *ok
wild match in the middle ok
1
wild match * not ok
wild match in the middle fail
0
wild match -* fail
wild match in the middle fail
0
to wild * in the *Ok
to wild matches in the middle Ok
1