Ce qu'il veut dire, c'est que les fonctions que tu as créé pour modifier les chaînes ne devraient rien afficher. Si tu veux afficher les chaînes, il vaut mieux le faire depuis la fonction 'main', après l'appel de la fonction.
Dans le meme genre je dois modifier dans une chaine les lettres par la sauivante, par ex on remplace a par b, mais voila mon code et ca ne marche pas
Dans ton code, tu copies simplement une chaîne dans une autre.
Il faut donc écrire :
1 2 3 4 5 6
| if (isalpha(*chaine1))
{
if (++(*chaine2 = *chaine1)>'z') *chaine2='a';
} else *chaine2= *chaine1;
chaine1++;
chaine2++; |
(Attention, ça ne marche que pour les minuscules. Pour gérer majuscules et minuscules à la fois, il faut coder autrement.)
Quelques explications :
*chaine2 = *chaine1++; copie le caractère pointé par 'chaine1' dans le caractère pointé par 'chaine2', puis incrémente ensuite le pointeur 'chaine1'.
++(*chaine2 = *chaine1); copie le caractère pointé par 'chaine1' dans le caractère pointé par 'chaine2', et l'incrémente. Cela permet donc de remplacer la valeur 'a' par 'b', 'b' par 'c', etc. On pourrait mettre le '++' à la fin s'il n'y avait pas le test de la condition du 'if'. Car si on dépasse 'z', il faut revenir à 'a'. Avec le '++' avant, l'incrémentation se fait avant le test de la condition; ça permet de tester si le caractère est supérieur à 'z'. Si on met le '++' à la fin, cela va foirer le test de la condition au cas où on incrémente le caractère 'z'.
D'où le :
if (++(*chaine2 = *chaine1)>'z') *chaine2='a';
Partager