opt28.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 74 行
C
74 行
#include "fail.h"
#include <stdio.h>
#include <stddef.h>
#include <string.h>
#include <limits.h>
int foo( char *s, size_t slen, char *patt, size_t pattlen, int esc )
{
static unsigned count;
if( ++count > 2 ) fail(__LINE__);
if( slen > INT_MAX ) fail(__LINE__);
while( pattlen > 1 && *patt == '%' && patt[1] == '%' ) {
patt++;
pattlen--;
}
while( slen > 0 ) {
if(( esc != (-1)) && (char)esc == *patt ) {
if (*s == patt[1]) {
s++;
slen--;
patt += 2;
pattlen -= 2;
} else {
return(0);
}
} else if (*patt == '%') {
unsigned int i;
patt++;
pattlen--;
if (pattlen == 0) {
return(1);
}
if (!(esc != (-1) && (char)esc == *patt) && *patt != '%' && *patt != '_') {
while (slen > 0 && *s != *patt) {
s++;
slen--;
}
}
for (i = 0; i <= slen; i++) {
if (foo(s + i, slen - i, patt, pattlen, esc)) {
return(1);
}
}
return(0);
} else if (*patt == '_' || *patt == *s) {
s++;
slen--;
patt++;
pattlen--;
} else {
return(0);
}
}
while (pattlen > 0) {
if (*patt != '%') {
return(0);
}
patt++;
pattlen--;
}
return(1);
}
int main()
{
int r;
r = foo("aacc", 4, "a%b%c", 5, (-1));
if( r != 0 ) fail(__LINE__);
_PASS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?