#include #include #include #define TAILLE_CHAINE 100 void permutation_circulaire (int *a, int *b, int *c) { int tmp = *a; *a = *b; *b = *c; *c =tmp; } char * chaine_copie (char *dest, const char *src) { char *tmp = dest; while ((*tmp++ = *src++)!='\0') ; return dest; } const char * car_dans_chaine (const char *s, int c) { for ( ; *s!='\0'; s++) if (*s == c) return s; return NULL; } /* sans utiliser la fonction precedente */ int compter_occurrences_car_v0 (const char *s, int c) { int cpt = 0; for ( ; *s != '\0'; s++) if(*s == c) cpt++; return cpt; } /* en utilisant strchr */ int compter_occurrences_car_v1(const char *s, int c) { int cpt = 0; const char *occ = strchr(s,c); while( occ != NULL) { cpt++; occ = strchr(occ+1,c); } return cpt; } int compter_occurrences_car(const char *s, int c) { int cpt = 0; for (char *p = strchr(s,c); p != NULL; cpt++, p = strchr(p+1, c)) ; return cpt; } char * chaine_concatenation_v0( char *dest, const char *src) { char *tmp = dest; while( *tmp != '\0') // on ne veut pas copier \0 tmp++; while ((*tmp++ = *src++)!='\0') // on veut copier \0 ; return dest; } char * chaine_concatenation( char *dest, const char *src) { chaine_copie(dest + strlen(dest), src); return dest; } const char * dernier_car_dans_chaine (const char *s, int c) { char *t = NULL; for (char *u=strchr(s,c) ; u != NULL ; u =strchr(u+1,c)) t = u; return t; } void remplacer_occurences_car (char *s, int c1, int c2) { for (char *p=strchr(s,c1) ; p != NULL ; p = strchr(p+1,c1)) *p = c2; } void usage (char * cmd) { fprintf(stderr,"Usage : %s mot mot caractere caractere\n",cmd); exit(EXIT_FAILURE); } int main (int argc, char *argv[]) { if (argc != 5) usage(argv[0]); char s1[TAILLE_CHAINE]; char s2[TAILLE_CHAINE]; chaine_copie(s1, argv[1]); strcpy(s2, argv[2]); char c = *argv[3]; char c2 = argv[4][0]; printf("La chaine %s a pour adresse %p\n",s1,s1); printf("La premiere occurrence de %c dans %s a pour adresse %p\n",c,s1,car_dans_chaine(s1,c)); printf("La chaine %s a pour adresse %p\n",s2,s2); printf("La derniere occurrence de %c dans %s a pour adresse %p\n",c,s2,dernier_car_dans_chaine(s2,c)); printf("Il y a %d occurence(s) de %c dans %s ",compter_occurrences_car_v0(s1,c),c,s1); printf("et %d occurence(s) de %c dans %s \n",compter_occurrences_car(s2,c),c,s2); printf ("Apres concatenation de %s et %s", s2,s1); chaine_concatenation (s2, s1); printf (", nous obtenons %s\n", s2); remplacer_occurences_car(s2,c,c2); printf("Apres remplacement de %c par %c : %s\n",c,c2,s2); return EXIT_SUCCESS; }