Programmation en C , inversement chaines

Résolu/Fermé
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 - 9 déc. 2011 à 18:46
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 - 10 déc. 2011 à 09:47
Bonjour,

J'ai un tableau de caractères en C , je demande à l'utilisateur de saisir une chaîne au clavier... il prends cette chaîne l'inverse et la met dans un deuxième tableau

J'ai essayé de faire ceci mais ça ne fonctionne pas...

char inverse_chaine(const char chaine[MAX], char inv[MAX])
{
#include <stdio.h>
#include <string.h>

int i, taille, j;

taille = longueur_chaine(chaine);
i = taille;

for (i= taille; i=0; i--){

inv[j] = chaine[i];
j++;

printf("test %s", inv);

}

}



ensuite j'appelle ma fonction dans mon main :

********************************************
int main(int argc, char *argv[])
{
char chaine1[MAX]; //declaration tableau
char inverse_chaine1[MAX];

inverse_chaine(chaine1, inverse_chaine1);
printf("chaine inverse: %s \n", inverse_chaine1);

...
...
}
********************************************

et voilà le résultat ...

test // ce que l'utilisateur tape au clavier
chaine : test //affichage de ce que l'utilisateur tape au clavier
taille de la chaine = 4 // taille de la chaîne saisie
chaine inverse: aaaaaAAaaaAaaaaaAaaAaaa-GCCLIBCYGMING-EH-TDM1-SJLJ-GTHR-MINGW32


Process returned 81 (0x51) execution time : 1.390 s
Press any key to continue.


Voilà il me retourne un truc totalement incohérent...
je plane need help ^^

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
9 déc. 2011 à 22:32
Bonjour,

Tout d'abord, il faut inclure #include <stdio.h> et cie dans les premières lignes et non dans un corps de fonction.

taille = longueur_chaine(chaine);
Qu'est-ce que longueur_chaine() ? Il nous faudrait son code, il y a peut-être une erreur aussi à ce niveau.
i = taille;
Inutile puisque tu remets i=taille dans le for.

j++;
Oui, mais que vaut j ? Il n'a jamais été initialisé, sa valeur est donc bidon. Il suffit de mettre j=0 avant le for. C'est cette erreur-là qui te fait tout bugguer.

Cdlt,
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
10 déc. 2011 à 09:22
J'ai essayé ça mais ça ne fonctionne toujours pas... dans mon résultat il ne m'affiche rien du tout

void inverse_chaine(const char chaine[MAX], char inv[MAX])
{
int i=0, taille, j=0;

taille = longueur_chaine(chaine);
i = taille;
for (i= taille; i>0; i--){
inv[j] = chaine[i];
j++;
}
}



ma fonction longueur chaine est équivalente à strlen en fait je me suis juste amusé à la créer moi même

int longueur_chaine(const char tab[MAX])
{
int i;
for (i = 0; tab[i] != '\0'; i++);
return i;
}
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
10 déc. 2011 à 09:47
AHHHHH j'ai trouvé ... il fallait que j'initialise mon tableau en fait :/ (erreur bidon :( )

voici le code

void inverse_chaine(const char chaine[MAX], char inv[MAX])
{
int i = 0;
int j =longueur_chaine(chaine)-1;
for (i = 0 ; i < MAX ; i++)
{
inv[i] = 0;
}
for(i=0;chaine[i]!='\0';i++)
{
inv[i]=chaine[j];
j--;
}
}


// appel de la fonction dans le main

inverse_chaine(chaine1, inverse_chaine1);
printf("chaine 1 : %s\n chaine inverse: %s \n\n", chaine1 , inverse_chaine1);

merci ^^
0