EXERCICE IV

Les pointeurs et les tableaux

  1. Faire un programme qui saisit deux chaînes (caractère par caractère), et à l'aide de fonction recherche dise où et combien de fois on trouve la sous-chaîne dans la chaîne.

Exemple : chaîne="fonction", sous-chaîne="on", on trouve deux fois la sous- chaîne, en position onction 1 fois  et en position on 2 fois. Si sous-chaîne="tab", on affiche tab n'existe pas dans la chaîne.

·        Déclarer type :   typedef char str[DIM]; pour le tableau chaîne

·        Les deux chaînes ont un nombre de caractères quelconque.

·        Utiliser la bibliothèque string.h.

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#define N 2

char *gets_li(char *s,int n);

void recherche(char *ch,char *sch);

 

void main()

 { int l;

      char *ch=(char *)malloc(N*sizeof(char));

      char *sch= (char *)malloc(N*sizeof(char));

      if(ch==NULL || sch==NULL) exit(1);

      puts("chaine a tester ? ");

      fflush(stdin);

      ch=gets_li(ch,N);

      puts("sous-chaine a trouver ?");

      fflush(stdin);

      sch=gets_li(sch,N);

      recherche(ch,sch);

      getch();

      free(ch); ch=NULL;

      free(sch); sch=NULL;

  }

 

char * gets_li(char* s,int n)

 { char c,*p=s;

      int i=0;

      printf("Entrer des caracteres\n");

      while(c=getchar(),c!='\n'&&c!=EOF)

        { if(i >= n)

                    {   n+=N;

                        s=(char *)realloc(s,n*sizeof(char));

                        if(s==NULL) exit(1);

                    }

                   s[i]=c;

                   i++;

        }

      s[i]='\0';

      return s;

 }

void recherche(char *ch,char *sch)

 {

  int compt=0, cle=0;

  int l=strlen(sch);

  while (ch!='\0')

      {

       ch=strstr(ch,sch);

       if(ch!='\0')

                  { compt++; printf("trouve en position %s fois %d\n",ch,compt);

                    if((ch+l) != '\0')

                    ch+=l;

                    cle=1;

                  }

      }

      if(!cle)

                  printf("%s n'existe pas dans la chaine\n",sch);

  }

2.      Modifier le programme de p.2 en permettant de changer la sous chaîne trouvée avec une nouvelle souschaîne, ayant le même nombre de caractères. Ecrire la fonction   void changer(str ch,str sch,str nouv) 
  1. Modifier le programme de p.3 en permettant d’effacer une sous chaîne trouvée. Ecrire la fonction void effacer(str ch,str sch)