Modifier un caractere dans une chaine

Résolu
cs_floche Messages postés 16 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 11 avril 2006 - 29 août 2005 à 14:04
cs_floche Messages postés 16 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 11 avril 2006 - 29 août 2005 à 20:07
Bonjours à tous

Le titre est assez explicite...

Je voudrais pouvoir changer un caractere d une chaine si c'est un a mais ca ne marche pas.

Merci pour votre aide

mon code :



int main()

{

char* fic;

int i,a;

printf("Entre une chaine");

gets(fic);

a=strlen(fic);

for(i=0; i<a; i++);

{

if(fic[i]=="a") fic[i]="b";



}

printf("%s",fic);

getch();

return 0;

}


Floche

4 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 14:13
"a" est adresse de chaine, sera donc jamais égal, il faut 'a'.


*fic POINTE OU ??? donne un buffer.

char fic[300];
....
.../
char *c = fic;
while(*c) { if(*c 'a') *c 'b';
c++;
}

ciao...
BruNews, MVP VC++
3
amina_6a Messages postés 3 Date d'inscription lundi 29 août 2005 Statut Membre Dernière intervention 2 septembre 2005
29 août 2005 à 16:26
salut ,
vous pouvez travailler avec les pointeurs, ça vous aidra de trouver ta chaine finale,
voici la modification que j ai fait sur votre prog.

int main()
{
char * fic, *pnt ; // j ai ajouter un pointeur "pnt"
printf("entrer une chaine");
gets(fic);
pnt = fic; //pnt porte la même adresse de votre chaine while(pnt!(strlen(fic)+fic+1) //tester si pnt à l' adresse de derniere caractere
{ if(*pnt 'a') *pnt 'b';
pnt++;
}
printf("%s", fic);
getch();
return 0;
}
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
29 août 2005 à 16:50
while(pnt!= (strlen(fic)+fic+1)
l'adresse de fin (le termainateur NULL) est à: fic + strlen(fic), SANS le + 1.
Ne pas mettre strlen() en boucle, sera recalculé à chaque tour. Avec pointeur, aucun besoin du tout, voir plus haut.
gets(fic); // fic oublie toujours de pointer sur un buffer.

ciao...
BruNews, MVP VC++
0
cs_floche Messages postés 16 Date d'inscription dimanche 10 octobre 2004 Statut Membre Dernière intervention 11 avril 2006
29 août 2005 à 20:07
Merci BruNews, ca marche !

Donc le code modifié est ( pour indications) :



int main()

{

char fic[300];

printf("Entre une chaine");

gets(fic);

char *c = fic;

while(*c)

{

if(*c 'a') *c 'b';

c++;

}

printf("%s",fic);

getch();

return 0;

}



[auteurdetail.aspx?ID=39449 ]Merci encore
Floche
0
Rejoignez-nous