Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique et de génie logiciel
2 Département dinformatique et de génie logiciel Pointeurs et chaines de caractères Fonction à écrire char * strcpy(char but[ ], char source[ ], int *codeErr); précondition: il y a assez de mémoire dans but pour faire la copie. postconditions: but contient une copie de source et * err = OK si la précondition a été satisfaire, *err=ERREUR sinon. valeur retournée: l'adresse de but si la précondition a été satisfaite. int strlen(char* str, int *err); préconditions: la chaîne str est correctement initialisée. postconditions: la taille (le nombre de caractères) dans str est déterminée et *err=OK si la précondition est satisfaite, *err=ERREUR sinon. valeur retournée: La taille de str si la précondition a été satisfaite. char* strcat(char* dest, char* srce, int *err); préconditions: dest: La chaîne de caractères de destination a une taille suffisante pour faire la concaténation postcondition: la chaîne dest contient la concaténation de srce à la chaîne originale dest et *err=OK si les préconditions sont satisfaites, *err = ERREUR sinon valeur retournée: l'adresse de dest si la précondition a été satisfaite. int strcmp(char* str1, char* str2, int *err); préconditions: str1: une chaîne de caractères. str2: une chaîne de caractères, sont correctement initialisées postconditions: comparaison str1 et str2 selon l'ordre alphabétique et *err=OK, si les préconditions ont été satisfaites, *err=ERREUR sinon. valeur retournée: 0 si str1 = str2 un entier > 0 si str1 > str2 un entier < 0 si str1 < str2
3 Département dinformatique et de génie logiciel Proto.h #define OK 0 #define ERREUR 1 #define FDC '\0' char * strcpyT( char but[], char source[], int *err); /*pré condition: il y a assez de mémoire dans but pour faire la copie. post conditions: but contient une copie de source et * err = OK si la précondition a été satisfaire, *err=ERREUR sinon valeur retournée: l'adresse de but si la précondition a été satisfaite. */ int strlenT( char* str, int *err); /*pré conditions: la chaîne str est correctement initialisée. post conditions: la taille (le nombre de caractères) dans str est déterminée et *err=OK si la pré condition est satisfaite, *err=ERREUR sinon. valeur retournée: La taille de str si la pré condition a été satisfaite. */ char* strcatT( char* dest, char* srce, int *err); /*pré conditions: dest: La chaîne de caractères de destination a une taille suffisante pour faire la concaténation post condition: la chaîne dest contient la concaténation de srce à la chaîne originale dest et *err=0si les pré conditions sont satisfaites, *err = 1 sinon valeur retournée: l'adresse de dest si la pré condition a été satisfaite. */ int strcmpT( char* str1, char* str2, int *err); /*pré conditions: str1: une chaîne de caractères. str2: une chaîne de caractères, sont correctement initialisées post conditions: Comparaison str1 et str2 selon l'ordre alphabétique si les préconditions ont été satisfaites et *err=OK, *err=ERREUR sinon valeur retournée: 0 si str1 = str2; > 0 si str1 > str2; < 0 si str1 < str2; */ Pointeurs et chaines de caractères
4 Département dinformatique et de génie logiciel Fonction strcmpT int strcmpT( char* str1, char* str2, int *err) {/*A: str1: une chaîne de caractères. str2: une chaîne de caractères,sont correctement initialisées*/ int cmp = 0; int i = 0; int j = 0; while( (*(str1 + i) != FDC ) && *(str2 + i) != FDC ) { if ( *(str1 + i) < *(str2 + i) ) {*err=OK; return -1; } if ( *(str1 + i) > *(str2 + i) ) {*err=OK; return 1; } i++; } if ( (*(str1 + i) == FDC ) && *(str2 + i) == FDC ) {*err=OK; return 0; } if( (*(str1 + i) != FDC ) && ( *(str2 + i) == FDC ) ) {*err=OK; return 1; } else {*err=OK; return -1; } Pointeurs et chaines de caractères
5 Département dinformatique et de génie logiciel Fonction strcatT char* strcatT(char* dest, char* srce, int *err) { /*A: dest: La chaîne de caractères de destination et srce: La chaîne de caractères à concaténer sont correctement initialisées*/ int i=0; int j=0; while( *(dest + i) != FDC ) { i++; } while( *(srce + j) != FDC ) { *(dest + i) = *(srce + j); i++; j++; } *err=OK; return dest; } Pointeurs et chaines de caractères
6 Département dinformatique et de génie logiciel Fonction strlenT int strlenT(char* str, int *err) { /*A:la chaîne str est correctement initialisée.*/ int ln = 0; int i =0; while( *str != FDC ) { ln++; str++; } *err=OK; return ln; } Pointeurs et chaines de caractères
7 Département dinformatique et de génie logiciel Fonction strcpyT char * strcpyT( char but[], char source[], int *err) { /*A: source, la chaîne de caractères à copier est correctement initialisée */ int i =0; while( source[i] != FDC ) { but[i] = source[i]; i++; } *err= OK; return source; } Pointeurs et chaines de caractères
8 Département dinformatique et de génie logiciel Fonction main pour effectuer les tests #include #include "Proto.h" int main () {char source[20] = "IFT-17582"; char but[20] = "Cours "; char *str; int err,ln; str = strcatT(but,source,&err); if (err !=0) { printf("\n erreur dans la fonction de concatenation.."); exit(1); } printf("%s\n",but); ln = strcmpT(source,but,&err); if (err !=0) { printf("\n erreur dans la fonction de comparaison.."); exit(1); } if (ln>0) printf("%s est plus grande que %s\n",source, but); else { if (ln==0)printf("%s est egale a` %s\n",source, but); else printf("%s est plus petite que %s\n",source, but); } return 0; } Pointeurs et chaines de caractères