Il est facile en C/C++ de savoir si une chaine correspond à un masque, surtout si celui-ci ne contient que des étoiles. On peut même d'ailleurs utiliser la fonction "fnmatch()". En revanche, comment comparer deux masques, c'est à dire savoir s'ils recouvrent le même type de chaîne ? Par exemple, eponyme*toto correspond il avec *toto  (utile pour comparer un masque de user IRC par rapport à un masque de ban) ? Le problème semblait difficile, et c'est "bigbourin" qui en quelques dizaines de minutes à pondu le code :

int masksMatch(char*str1,char*str2)
{  if (*str1 == 0 && *str2 == 0)
    return (1);
  if (*str1 == '*')
    {
      if (*str2 == 0)
      return (masksMatch(str1 + 1, str2));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str2 == '*')
    {
      if (*str1 == 0)
      return (masksMatch(str1, str2 + 1));
      else
      return (masksMatch(str1 + 1, str2) || masksMatch(str1, str2 + 1));
    }
  if (*str1 == *str2)
    return (masksMatch(str1 + 1, str2 + 1));
  return (0);
}

La fonction renverra '1' si le masque str1 correspond au masque str2.

Bravo et merci à 'bigbourin'.

Fabien