Re: маска
- From
- Oleg I. Khovayko ()
- To
- Anton Morozov
- Date
- 2002-10-09T20:22:45Z
- Area
- RU.ALGORITHMS
From: "Oleg I. Khovayko" <olegh@ncbi.nlm.nih.gov>
> Есть маска, есть строка. В маске любые символы и "*" с "?" Нада проверить,
> попадает ли строка в маску.
Как-то сильно наворочено у тебя получилось. Я, честно говоря, сильно не вникал.
Вместо вникания в твой код написал я за пару часов такуя вот процедуру:
<<<
#include <stdio.h>
int fmask(const char *mask, const char *str) {
for( ; ; str++) {
switch(*mask++) {
case '*' : if(fmask(mask, str))
return 1;
mask--;
case '?' : if(*str == 0) return 0;
continue;
case 0 : return *str == '\0';
default : if(mask[-1] == *str) continue;
return 0;
} // switch
} // for
} // fmask
void main() {
char mask[100], str[100];
for( ; ; ) {
printf("\nEnter mask and str: ");
scanf("%s%s", mask, str);
printf("\nmask:[%s] str:[%s]; Result: %s\n", mask, str,
fmask(mask, str)? "OK" : "BAD");
}
}
>>>
Вроде как работает...
Извини, что C использую, но Паскаля у меня нет, а без тестирования, "вслепую"
сразу правильно написать вряд ли бы получилось. Но я надеюсь, тебе не сложно будет
"по мотивам" написать что-то свое на Паскале.
Как будешь перепирать, обрати внимание, что в метке "case '*'" нет continue/break.
Здесь управление передается на "case '?'"
PS: полную безглючность не гарантирую - но на паре десятков моих тестов вроде как
работает. Потестируй перед использованием...
--
#include <best/regards.hpp>
Oleg I. KHOVAYKO
(301)435-5885 || WEB: http://olegh.spedia.net
--- ifmail v.2.15dev5
* Origin: National Center for Biotechnology Information (2:5020/400)