вівторок, 3 серпня 2010 р.

strlike && strilike

strlike function checks if a string matches some wild-card like *.dll, *.d??, *.*
strilike is just a case-insensitive analogue
* - any number of any letters
? - exactly one unknown letter
bool
strlike (char* str, char* mask)
{
 if (!(str && mask)) {
  return false;
 }
 while (*mask) {
  if (*mask == '*') {
   while (*mask == '*') {
    mask++;
   }
   if (*mask == '\0') {
    return true;
   }
   while (*str) {
    if (strlike(str, mask)) {
     return true;
    }
    str++;
   }
   return false;
  } else if (*mask == *str || (*mask == '?' && *str != '\0')) {
   str++;
   mask++;
  } else {
   return false;
  }
 }
 return *str == '\0';
}

bool
strilike (char* str, char* mask)
{
 if (!(str && mask)) {
  return false;
 }
 while (*mask) {
  if (*mask == '*') {
   while (*mask == '*') {
    mask++;
   }
   if (*mask == '\0') {
    return true;
   }
   while (*str) {
    if (strilike(str, mask)) {
     return true;
    }
    str++;
   }
   return false;
  } else if (tolower(*mask) == tolower(*str) || (*mask == '?' && *str != '\0')) {
   str++;
   mask++;
  } else {
   return false;
  }
 }
 return *str == '\0';
}

Немає коментарів:

Дописати коментар