Выбор слов, подходящих под шаблон, является одним из наиболее применяемых алгоритмов. Например, задано слово, в котором встречаются символы ‘*’ и ‘?’. Такие слова будем называть шаблоном. Если в произвольном слове символы совпадают с символами шаблона, а вместо символа ‘*’ можно использовать любую последовательность символов и вместо ‘?’ – любой символ, то говорят, что слово подходит под шаблон. Например, пароход и паропровод подходят под шаблон паро*од. В первом случае под ‘*’ скрывается последовательность “х”, а во втором – “пров”. Под шаблон ?а?а подходят слова мама и папа.
Листинг 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;
}