Выбор слов, подходящих под шаблон

Выбор слов, подходящих под шаблон, является одним из наиболее применяемых алгоритмов. Например, задано слово, в котором встречаются символы ‘*’ и ‘?’. Такие слова будем называть шаблоном. Если в произвольном слове символы совпадают с символами шаблона, а вместо символа ‘*’ можно использовать любую последовательность символов и вместо ‘?’ – любой символ, то говорят, что слово подходит под шаблон. Например, пароход и паропровод подходят под шаблон паро*од. В первом случае под ‘*’ скрывается последовательность “х”, а во втором – “пров”. Под шаблон ?а?а подходят слова мама и папа.

Листинг 7.2. Функция shablon () проверяет, подходит ли слово под шаблон вида ‘*’.

//L7_2.cpp

int shablon(char *word, char *sh)

{

int b, e, si=0, ls;

while(sh[si]!= '\0' && sh[si]!= '*') si++;

// Если символ ‘*’ отсутствует:

if(si == strlen(sh) && strcmp(word, sh) == 0)

return 1;

if(si == strlen(sh) && strcmp(word, sh)!= 0)

return 0;

// si – индекс символа ‘*’ в шаблоне.

// Проверяем совпадение до ‘*’:

for(b=0; b<si; b++)

if(word[b]!= sh[b])

break;

if(b<si) // Символы не совпали

return 0;

else

{

// Проверяем совпадение после ‘*’:

for(e=strlen(word)-1, ls = strlen(sh)-1; sh[ls]!= '*'; e--, ls--)

if(word[e]!= sh[ls])

break;

if(sh[ls]!= '*') // Символы не совпали с символом ‘*’

return 0;

else // Символы совпали до и после ‘*’

return 1;

}

Перевод прописных символов в строчные

При обработке последовательности символов также часто используется процедура – перевод символов верхнего регистра (прописные символы) в символы нижннего регистра (строчные символы).

Листинг 7.3. Функция A_to_a () переводит прописные символы в строчные.

//L7_3.cpp

char A_to_a(char c)

{

if(c >='А' && c <= 'Я')

c = c + 'а ' - 'А';

return c;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: