/*----------------------------------------------------------*/ /* */ /* AUTHOR : Eric VIOLARD */ /* E-MAIL : violard@icps.u-strasbg.fr */ /* ORGANISM : Université Louis Pasteur (Strasbourg) */ /* CREATION : 28/12/02 */ /* */ /* ---------------------------------------------------------*/ #include /* --- Définition du type des chaines de caractères --- */ /* Redéfinition des fonctions associées : - longueur - copie - concaténation (mise bout à bout) - comparaison */ int strlen2(string s) /* longueur de la chaîne s */ { int i=0; /* indice d'un caractère de s (initialement l'indice du premier caractère) */ while(s[i]!='\0') /* tant que la fin de la chaîne s n'est pas atteinte */ i++; /* on passe au caractère suivant de s */ return i; /* l'indice du caractère '\0' est la longueur de la chaîne */ } void strcpy2(string s, string t) /* copie de t dans s par effet de bord */ /* pré-conditions : néant */ /* post-conditions : pour i compris entre 0 et strlen(t)-1 . s[i]=t[i] */ { int i=0; /* indice d'un caractère de t (initialement l'indice du premier caractère) */ while(t[i]!='\0') /* tant que la fin de la chaîne t n'est pas atteinte */ { s[i]=t[i]; /* on copie le caractère courant de t dans s au même indice */ i++; /* on passe au caractère suivant de t */ } s[i]='\0'; /* on marque la fin de la chaîne s */ } void strcat2(string s, string t) /* ajoute la chaîne t à la fin de la chaîne s (concaténation) */ /* la chaine s est modifiée par effet de bord */ /* pré-conditions : strlen(s)+strlen(t) < NB_MAX_CHAR */ /* post-conditions : si l est la longueur de s avant exécution pour i compris entre 0 et l-1 . s[i] a la même valeur qu'avant exécution et pour i compris entre l et l+strlen(t) . s[i+l]=t[i] */ { int l=strlen2(s); /* longueur de s */ int i=0; /* indice d'un caractère de t (initialement l'indice du premier caractère) */ /* copie de t dans s avec un décalage de l */ while(t[i]!='\0') { s[i+l]=t[i]; i++; } s[i+l]='\0'; } int strcmp2(string s,string t) /* compare s et t */ /* le résultat est : 0 si s et t sont identiques, -1 si s précéde t, +1 si t précéde s */ { int r; /* résultat */ int i=0; /* indice d'un caractère de t ou s (initialement l'indice du premier caractère) */ /* on passe les caractères tant qu'il reste des caractères dans les deux chaînes et que ces caratères sont les mêmes */ while(s[i]!='\0' && t[i]!='\0' && s[i]==t[i]) i++; if(s[i]=='\0' && t[i]=='\0') /* si on a atteint la fin des deux chaînes */ r=0; /* alors les chaînes sont identiques */ else if(s[i]=='\0') /* si la fin de s est atteinte et il reste des caractères dans t */ r=-1; /* alors s précède t */ else if(t[i]=='\0') /* si la fin de t est atteinte et il reste des caractères dans s */ r=+1; /* alors t précède s */ else if((int)s[i]<(int)t[i]) /* si les caractères sont différents, alors on compare leur code ascii */ r=-1; else r=+1; return r; }