begin process at 2012 05 27 19:32:43
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > WILD_MATCH() - SAVOIR SI UN WILDCARD VALIDE UNE CHAÎNE

WILD_MATCH() - SAVOIR SI UN WILDCARD VALIDE UNE CHAÎNE


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Chaîne de caractères Niveau :Débutant Date de création :29/07/2004 Vu :3 161

Auteur : Hades53

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

Cette fonction permet de savoir si une chaîne est validée par une expression wildcard * ?  (retourne 1 si validée ou 0 si non-validée).

Petit rappel sur les wildcards * ?:
*-> facultatif; n'importe quel caractère(s).
? -> un caractère quelconque.

Donc:
'*.*' valide 'file.ext',  '.ext', 'ext.', '.' mais ne valide pas 'bonjour' ou 'cactus'.
'*.' valide 'ainsi soit-il.' mais ne valide pas 'ainsi soit-il'
'?*.???' valide 'image.bmp' mais ne valide pas 'image.jpeg' ou '.gif'

Source

  • #include <stdio.h>
  • int wild_match(char *wildcard, char *string) {
  • char *c, *d; /*deux pointeurs qui serviront en cas d'échec de matching*/
  • while (*wildcard != 42 && *wildcard != 0) {
  • if (!*string) return 0; /*string est nulle et wildcard ne l'est pas on retourne 0*/
  • /*si le caractère *string est le même que *wildcard ou si *wildcard est
  • un point d'interrogation (?=n'importe quel caractère)...*/
  • if ((*string == *wildcard) || (*wildcard == 63)) { string++; wildcard++; }
  • else return 0;
  • }
  • //si il reste des caractères à vérifier dans string et que il n'y en a plus aucun dans wildcard..
  • if (*string && !*wildcard) return 0;
  • while (*wildcard == 42) wildcard++; /*pour permettre de passer les * en trop (**,***,etc.)*/
  • if (!*wildcard) return 1; /*le dernier caractère du wildcard est un * et comme les caractères d'avant on été vérifiés
  • le wildcard valide donc la chaîne*/
  • /*début du motif, on configure les pointeurs*/
  • c = wildcard; d = string;
  • while (*string) {
  • if (*wildcard == 42) {
  • while (*wildcard == 42) wildcard++; /*pour permettre de passer les * en trop (**,***,etc.)*/
  • if (!*wildcard) return 1;
  • /*début du motif, on configure les pointeurs*/
  • c = wildcard; d = string;
  • }
  • else if ((*string == *wildcard) || (*wildcard == 63)) { string++; wildcard++; }
  • /*en cas d'échec du matching du motif , on remettra wildcard à sa position de départ (début du motif)
  • ainsi que string, qu'on avancera de 1 afin de tester toutes les combinaisons*/
  • else { string = ++d; wildcard = c; }
  • }
  • while (*wildcard == 42) wildcard++;
  • if (!*wildcard) return 1;
  • /* si wildcard contient un caractère autre que * et '\0', il ne vérifie donc pas la chaîne*/
  • return 0;
  • }
  • int main(int argc, char* argv[])
  • {
  • printf("Validée: %d\n",wild_match("?*.???","image.png"));
  • printf("Validée: %d\n",wild_match("*Claude*","il est où ce Claude ?"));
  • printf("Validée: %d\n",wild_match("?*.???",".gif"));
  • printf("Validée: %d\n",wild_match("**hHxL*?Ajj???***?ffc????HTVcd**","WMfnohHxLMvCoSAjjSrAEAwZqaMuNmULffcTJBSHTVcdCaYYng"));
  • return 0;
  • }
#include <stdio.h>

int wild_match(char *wildcard, char *string) {
	char *c, *d; /*deux pointeurs qui serviront en cas d'échec de matching*/
	while (*wildcard != 42 && *wildcard != 0) {
		if (!*string) return 0; /*string est nulle et wildcard ne l'est pas on retourne 0*/
		/*si le caractère *string est le même que *wildcard ou si *wildcard est
		un point d'interrogation (?=n'importe quel caractère)...*/
		if ((*string == *wildcard) || (*wildcard == 63)) { string++; wildcard++; }
		else return 0;
	}
	//si il reste des caractères à vérifier dans string et que il n'y en a plus aucun dans	wildcard..
	if (*string && !*wildcard) return 0;
	while (*wildcard == 42) wildcard++; /*pour permettre de passer les * en trop (**,***,etc.)*/
	if (!*wildcard) return 1; /*le dernier caractère du wildcard est un * et comme les caractères d'avant on été vérifiés
							  le wildcard valide donc la chaîne*/
	/*début du motif, on configure les pointeurs*/
	c = wildcard; d = string;
	while (*string) {
		if (*wildcard == 42) {
			while (*wildcard == 42) wildcard++; /*pour permettre de passer les * en trop (**,***,etc.)*/
			if (!*wildcard) return 1;
			/*début du motif, on configure les pointeurs*/
			c = wildcard; d = string;
		}
		else if ((*string == *wildcard) || (*wildcard == 63)) { string++; wildcard++; }
		/*en cas d'échec du matching du motif , on remettra wildcard à sa position de départ (début du motif)
		ainsi que string, qu'on avancera de 1 afin de tester toutes les combinaisons*/
		else { string = ++d; wildcard = c; }
	}
	while (*wildcard == 42) wildcard++;
	if (!*wildcard) return 1; 
	/* si wildcard contient un caractère autre que * et '\0', il ne vérifie donc pas la chaîne*/
	return 0;
}

int main(int argc, char* argv[])
{
	printf("Validée: %d\n",wild_match("?*.???","image.png"));
	printf("Validée: %d\n",wild_match("*Claude*","il est où ce Claude ?"));
	printf("Validée: %d\n",wild_match("?*.???",".gif"));
	printf("Validée: %d\n",wild_match("**hHxL*?Ajj???***?ffc????HTVcd**","WMfnohHxLMvCoSAjjSrAEAwZqaMuNmULffcTJBSHTVcdCaYYng"));
	return 0;
}



 Sources du même auteur

Source avec Zip Source avec une capture MORPIONS AVEC PRISE EN CHARGE RÉSEAU [WIN32]
Source avec Zip Source avec une capture [WIN32] TRIER UNE LISTBOX
LISTE DOUBLEMENT CHAÎNÉE GÉNÉRIQUE AVEC ITÉRATEURS
GETTOK() - OBTENIR LE NIÈME TOKEN
ISIN,ISWORD

 Sources de la même categorie

CALCUL DE CLEF RIB par Renfield
Source avec Zip [C] WD_STRING V2.2 par cyberripper
Source avec Zip LES STRING EN C, AFFECTATION, CONCATÉNATION, SPLIT, ... par appranting
Source avec Zip [C] WD_STRING V1.9 par cyberripper
Source avec Zip LIBRAIRIE LANGUAGES par astro53

Commentaires et avis

Commentaire de brenntengel le 29/07/2004 17:35:50

sault ....
Personnellement j'ai pas trop compris le principe
si tu peut expliquer  plus  parce que
ca m'intersse de travailer sur les chaines de
carracteres.(j'ai dernierment mis mon code sur
le sites et c'est sur les chaines de carracters les fichiers
TEXT et +++)(TEXT GO V 2.0)

Commentaire de Hades53 le 29/07/2004 18:24:33

Bonjour,
En fait c'est très simple, admettons que tu veux savoir si une chaîne finie par "as" et bien tu rentres comme wildcard "*as", les chaînes comme "repas", "fracas" ou "as" seront validées car elle finissent pas "as".

Les "*" et les "?" sont des méta-caractères,
?: spécifie un caractère alphanumérique ex : ?es valide "les", "mes", "des", "ses" ...
*: spécifie zéro ou n caractères. ex : art* valide "article" "artéfact", "artiste", ...

Représentation du wildcard: "Bonjour*v???*allez*bien ?" avec la chaîne "Bonjour William, vous allez plutôt bien ?":
Bonjour*******v???*allez*****bien ?
Bonjour William, vous allez plutôt bien ?

Voilà j'espère que ça t'as aidé.

Commentaire de AlexMAN le 29/07/2004 22:17:14

Pour moi c'est plus clair, et jtrouve ca pas mal. Mais pkoi "wildcard"  ? Ya pas une traduction francaise  ? enfin kelk chose ki puisse expliker ce terme. merci

Commentaire de Hades53 le 29/07/2004 22:26:09

Pourquoi wildcard ? C'est l'appellation officielle il me semble, dans MSDN &Co il est écrit wildcard pour désigner ce truc.

wildcard:
/ouaiyld-kard/ n. f.

[caractère] caractère en remplaçant un ou plusieurs autres, quels que soient ces derniers. Syn. de joker. caractère générique en français.

Commentaire de AlexMAN le 29/07/2004 22:28:15

ok ok merci, c on ne peut plus clair.

++

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales