C probleme code fonction inverse

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 à 13:40
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,

je cherche des codes sur le net me permettant de travailler sur des chaines j'ai trouvé cet exemple permettant d'inverser 2 chaines mais il ne fonctionne pas... quelqu'un peut m'aider à le faire fonctionner svp ?

/*
Écrire une fonction qui inverse une chaîne de caractères et met le résultat dans une autre. Les chaînes sont données en argument.*/

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


tout le reste du code fonctionne, toutes les autres fonctions sauf la fonction inverse_chaine ....... je comprends pas ... :(

#include <stdio.h>
#include <stdlib.h>
//#include "proto.h";

// constantes
const MAX = 100;

//prototypes
void lire_chaine(char tab[MAX]);


/*En utilisant la fonction getchar()qui permet de lire un caractère saisi au clavier et qui le
retourne, écrire une fonction qui lit une chaîne de caractères tapée au clavier et qui l'enregistre
dans un tableau de caractères. Le caractère saut de ligne '\n' indiquera la fin de la saisie.*/
void lire_chaine(char tab[MAX])
{
int i=0;
char c;
c=getchar();
while((c!='\n')&&(i<MAX))
{
tab[i++]=c;
c=getchar();
}
tab[i]='\0';
}

/*Écrire une fonction qui calcule la longueur d'une chaîne.*/
int longueur_chaine(const char tab[MAX])
{
int i;
for (i = 0; tab[i] != '\0'; i++);
return i;
}


/*Écrire une fonction supprime_espace qui supprime les espaces et tabulations d'une
chaîne de caractères. Cette fonction ne doit pas utiliser de tableau intermédaire.*/
void supprime_espace(char tab[MAX])
{
int i;
int j=0;
for (i = 0; tab[i] != '\0'; i++)
if (tab[i] != ' ' && tab[i] != '\t')
{
tab[j] = tab[i];
j++;
}
tab[j] = '\0';
}


/*Écrire une fonction qui inverse une chaîne de caractères et met le résultat dans une autre. Les
chaînes sont données en argument.*/
void inverse_chaine(const char chaine[MAX], char inv[MAX])
{
int i;
int j =longueur_chaine(chaine)-1;
for(i=0;chaine[i]!='\0',i++)
{
inv[i]=chaine[longueur_chaine(chaine)--];
j--;
}
}


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

lire_chaine(chaine1); // appel de la fonction lire_chaine
printf("chaine : %s \n", chaine1 ); // affichage resultat fonction lire_chaine

valeur = longueur_chaine(chaine1); // appel de la fonction longueur_chaine
printf("taille de la chaine = %d\n", valeur); // affichage resultat fonction longueur_chaine

supprime_espace(chaine1); // appel fonction supprime_espace
printf("chaine sans espaces: %s \n", chaine1 ); // affichage resultat fonction supprime espace

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


A voir également:

5 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:34
Merci d'éviter les double post.(https://forums.commentcamarche.net/forum/affich-23852233-c-probleme-code-fonction-inverse
Ca évitera que je me fatigue à écrire ailleurs...
3
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
J'ai réussi merci

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 dans le main

inverse_chaine(chaine1, inverse_chaine1);
printf("chaine 1 : %s\nchaine inverse: %s \n\n", chaine1 , inverse_chaine1);
1
ScorpionViolet Messages postés 1289 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 2 octobre 2012 169
9 déc. 2011 à 14:05
Bonjour,
Quand tu compiles le code, quel est le message d'erreur sur la sortie standart?
Cdt.
0
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
9 déc. 2011 à 17:54
inv[i]=chaine[longueur_chaine(chaine)--];

il me met une erreur sur cette ligne en me disant

error : 1value required as decrement operand
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
9 déc. 2011 à 15:23
Salut !!!

Ce code est du charabia ! ça donne pas envie de l'étudier !
Ya déjà des bibliothèques déjà prêtes pour permuter deux chaines de caractères !

Par exemple !

#include <stdio.h> 
#include <string.h> 

int permuterChaines(char chaine1[],char chaine2[]) { 
        char help[60]; 

        if(strlen(chaine1) != strlen(chaine2)) { 
                return 0; 
        } 

        strcpy(help,chaine1); 
        strcpy(chaine1,chaine2); 
        strcpy(chaine2,help); 
        return 1; 
} 

int main(int argc, char *argv[]) { 
        char chaine1[] = "Bonjour"; 
        char chaine2[] = "Bonsoid"; 

        if(permuterChaines(chaine1,chaine2)) 
                printf("Chaine 1 : %s\nChaine 2 : %s",chaine1,chaine2); 
        else printf("Tailles des chaines differentes, permutation impossible !"); 

        return 0; 
}


Mettez en résolu quand c'est résolu -.- ...
0
ScorpionViolet Messages postés 1289 Date d'inscription samedi 3 décembre 2011 Statut Membre Dernière intervention 2 octobre 2012 169
9 déc. 2011 à 15:40
et si ta chaine de caratère est supérieure à help[60] ? ça va seg fault ...
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 9/12/2011 à 16:06
Ben reste qu'a l'optimiser ! : )

int permuterChaines(char chaine1[],char chaine2[]) {
        char *pnt = NULL;

        if(strlen(chaine1) != strlen(chaine2)) {
                return 0;
        }

        pnt = (char*) malloc(sizeof(chaine1));
        if(pnt == NULL) return 0;

        strcpy(pnt,chaine1);
        strcpy(chaine1,chaine2);
        strcpy(chaine2,pnt);
        free(pnt);

        return 1;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
capa57 Messages postés 352 Date d'inscription lundi 30 juin 2008 Statut Membre Dernière intervention 26 mai 2016 13
9 déc. 2011 à 17:53
en fait ce que je voudrais faire...

c'est avec ma chaine1 (par exemple : bonjour)

mettre dans chaine2 l'inverse (il me mettra "roujnob")
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
9 déc. 2011 à 20:22
Et t'as voulu faire ça en une 50aine de lignes !!! :s

void inverserChaine(char chaine[]) {
        char car;
        int i, taille = strlen(chaine);

        for(i=0; i<taille/2; i++) {
                car = chaine[i];
                chaine[i] = chaine[taille-i-1];
                chaine[taille-i-1] = car;
        }
}

int main(int argc, char *argv[]) { 
        char chaine1[] = "Bonjour";

        inverserChaine(chaine1);
        printf("%s",chaine1);

        return 0;
}
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:23
oui mais là tu remplaces la même chaîne, moi je voudrais avoir une chaine 1 , et dans une chaine 2 mettre l'inverse de la chaine 1
0