|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Oleg I. Khovayko 2:5020/400 09 Oct 2002 20:22:45 To : Anton Morozov Subject : Re: маска -------------------------------------------------------------------------------- > Есть маска, есть строка. В маске любые символы и "*" с "?" Hада проверить, > попадает ли строка в маску. Как-то сильно наворочено у тебя получилось. Я, честно говоря, сильно не вникал. Вместо вникания в твой код написал я за пару часов такуя вот процедуру: <<< #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 использую, но Паскаля у меня нет, а без тестирования, "вслепую" сразу правильно написать вряд ли бы получилось. Hо я надеюсь, тебе не сложно будет "по мотивам" написать что-то свое на Паскале. Как будешь перепирать, обрати внимание, что в метке "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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/11522b3b02beb.html, оценка из 5, голосов 10
|