Retour à la page principale


Accueil

Extraits

Nous contacter


Annales des Concours

20 Dissertations

Technique et Pratique

Mathématiques pour la physique

Objectif Agrégation

Le sujet de synthèse par l'exemple


Retour à la liste des programmes

Les programmes du chapitre 5

C/POSIX



#include <stdio.h>
#include <strings.h>
#include <regex.h>

const char * chaine = "Fourmond:Sophie:07-28-2004"
":02-14-2005:";
char chaineFinale[200] = ""; 

int main()
{
  char tampon[200];   char cap[3][30];
  regex_t RE;   regmatch_t m[4];
  int depart = 0; 
  printf("Chaine initiale: %s\n",chaine);
  regcomp(&RE,"([0-9]{2})-([0-9]{2})-([0-9]{4})",
          REG_EXTENDED );
  /* On verifie la presence de dates */
  if(regexec(&RE,chaine,0,NULL,0))
     printf("Pas de dates !\n");
  while(! regexec(&RE,chaine+depart,4,
                  m,0))  {
    int i; 
    /* On rajoute le 0 final dans tampon */
    tampon[0] = 0;
    /* On affiche les dates trouvees: */
    strncat(tampon,chaine+depart+m[0].rm_so,
           m[0].rm_eo - m[0].rm_so);
    printf("Date trouvee: %s\n",tampon);
    /* On ajoute tout ce qui a ete trouve avant la
       correspondance dans chaineFinale; on
       utilise strncat pour ne copier que les
       premiers caracteres et non toute la
       chaine. */
    strncat(chaineFinale, chaine+depart,
            m[0].rm_so);
    /* On copie les groupes captures dans cap: */
    for(i = 0; i< 3; i++){
      /* On cree une chaine vide finie par un zero
         dans cap[i]; c'est requis par strncat.*/
      cap[i][0] = 0;
      /* On copie avec strncat: */
      strncat(cap[i], chaine+depart+
              m[i+1].rm_so,m[i+1].rm_eo -
              m[i+1].rm_so);
    }
    /* Maintenant, cap[i] contient le i+1-ieme
       groupe capture:*/
    printf("Annee: %s\n",cap[2]);
    /* On prepare la chaine de remplacement dans 
       tampon:*/
    sprintf(tampon,"%s.%s.%s",
            cap[1],cap[0],cap[2]);
    /* On la rajoute dans la chaine finale:*/
    strcat(chaineFinale,tampon);
    /* On met a jour depart */
    depart += m[0].rm_eo;
  }
  /* Finalement, on copie la fin de chaine dans
     chaineFinale: */
  strcat(chaineFinale, chaine+depart);
  printf("Chaine finale: %s\n",chaineFinale);
}