|
|
|
|
Salut tout le monde
voila je travaile sur les pointeurs en C et voila l'énoncé de l'exercice:
Ecrire un programme qui lit deux chaînes de caractères CH1 et CH2 au clavier et élimine toutes les lettres de CH1 qui apparaissent aussi dans CH2. Utiliser deux pointeurs P1 et P2, une variable logique TROUVE et la fonction strcpy.
Exemples:
Bonjour
Bravo
==>
njou
Bonjour
bravo
==>
Bnjou
abacab
aa
==>
bcab
et voila la solution de l'exercice:
#include <stdio.h>
#include <string.h>
main()
{
/* Déclarations */
char CH1[101], CH2[101]; /* chaînes données */
char *P1, *P2; /* pointeurs d'aide dans CH1 et CH2 */
int TROUVE; /* indicateur logique: vrai, si le caractère */
/* actuel dans CH1 a été trouvé dans CH2. */
/* Saisie des données */
printf("Entrez la première chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH1);
printf("Entrez la deuxième chaîne de caractères"
" (max.100 caractères) :\n");
gets(CH2);
/* Eliminer les lettres communes */
/* Idée: Parcourir CH2 de gauche à droite et contrôler */
/* pour chaque caractère s'il se trouve aussi dans CH1. */
/* Si tel est le cas, éliminer le caractère de CH1 à */
/* l'aide de strcpy. */
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
/* Affichage du résultat */
printf("Chaîne résultat : \"%s\" \n", CH1);
return 0;
}
et j'arrive pas à comprendre le dernier bloc 'c'est à dire ça:
for (P2=CH2; *P2; P2++)
{
TROUVE = 0;
for (P1=CH1 ; *P1 && !TROUVE ; P1++)
if (*P2==*P1)
{
TROUVE = 1;
strcpy(P1, P1+1);
}
}
je doit savoir la signiffication de chaque ligne s'l vous plait par exemple dans la boucle "for" il ya *P1 && !TROUVE j'ai rien compri
s'il vous plait j'attent votre reponse
pliiiiiiiiiiz
Configuration: Windows XP Internet Explorer 7.0
Le test que tu ne comprends pas consiste à vérifier
#include <string.h>
#include <stdio.h>
int main(){
const char *str1 = "Bonjour", *str2 = "Bravo";
int trouve;
const char *p1,*p2;
printf("str1 = %s\nstr2 = %s\n",str1,str2);
for(p1 = str1; *p1 != '\0'; ++p1){
trouve = 0;
for(p2 = str2; *p2 != '\0' && !trouve; ++p2){
if(*p1 == *p2){
trouve = 1;
break;
}
}
if(!trouve) printf("%c",*p1);
}
printf("\n");
return 0;
}
En espérant t'avoir éclairé... Bonne chance |
Salut a nouveau,
|
Je vais tenter une autre explication. Concrètement voilà ce que fait strcpy :
void strcpy(char *dst,const char *src){
char *pdst;
const char *psrc;
for(psrc = src,pdst = dst; *psrc != '\0'; ++psrc,++pdst){
*pdst = *psrc;
}
}
Ainsi suppose que l'on considère la chaîne "Bravo" et que l'on fasse le fameux strcpy(p,p+1). En gras je mets le caractère pointé par psrc et en italique le caractère pointé par pdst. Déroulons les itérations de la fonction strcpy (en première ligne, le contenu de la chaîne dst au début de l'itération et en seconde ligne sa valeur à la fin de l'itération) : Itération 1 : Bravo\0 rravo\0 Itération 2 : rravo\0 raavo\0 Itération 3 : raavo\0 ravvo\0 Itération 3 : ravvo\0 ravoo\0 Itération 4 : ravoo\0 ravo\0\0 Itération 5 : ravo\0\0 psrc == '\0' => fin A la fin la chaîne dst contient ravo\0\0 ce qui s'écrit "ravo". C'est plus clair |