EXERCICE IV
Les pointeurs et les tableaux
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)