zastaph | voila, j'espère que ça va t'aider un peu
c'est peut être pas la meilleure méthode mais au moins ça marche
Code :
- // texte contient la chaine originale
- // str contient la chaine à remplacer
- // str2 contient le motif de remplacement
- char *c_ou,*c_ou_old,*resultat;
- int taille=0,taille_old=0,pb=0;
- c_ou=c_ou_old=texte;
- if((resultat=(char*)malloc(sizeof(char)))==NULL) exit(1);
- while((c_ou=strstr(c_ou,str))!=NULL && pb==0) //c_ou pointe sur la 1ère sous-chaine commençant par str
- {
- taille+=c_ou-c_ou_old+strlen(str2)+1; // taille totale de la nouvelle chaine après remplacement
- if((resultat=(char*)realloc(resultat,sizeof(char)*taille))==NULL)
- {
- printf("DTC achete de la ram" );
- pb=1;
- }
- else
- {
- memcpy(resultat+taille_old,c_ou_old,c_ou-c_ou_old); //copie la partie entre le dernier motif et le motif à remplacer
- taille_old+=c_ou-c_ou_old;
- memcpy(resultat+taille_old,str2,strlen(str2)); //copier le nouveau motif
- taille_old+=strlen(str2);
- c_ou_old=c_ou+strlen(str);
- c_ou++; // c_ou pointe sur un motif donc strstr ne va pas chercher + loin, donc on le force en allant un cran à droite
- };
- };
- if (pb==0)
- {
- taille+=(texte+strlen(texte))-c_ou_old+1;
- if((resultat=(char*)realloc(resultat,sizeof(char)*taille))==NULL) //allouer pour copier la fin de la chaine
- printf("DTC achete de la ram" );
- else
- {
- memcpy(resultat+taille_old,c_ou_old,(texte+strlen(texte))-c_ou_old);
- taille_old+=((texte+strlen(texte))-c_ou_old);
- *(resultat+taille_old)='\0'; //placer le caractère de fin de chaine
- };
- };
- // la nouvelle chaine modifiée est : resultat
|
Pour les fichier, c'est la même logique, ouvre l'original et en parallèle un autre en écriture. tu recopies jusqu'à trouver le motif que tu remplaces par le nouveau puis tu continues allez, bonne chance pour ton TP ---------------
yo, nippon ichi
|