C probleme code fonction inverse

Résolu
capa57 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
capa57 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Membre Dernière intervention   13
 
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 1290 Date d'inscription   Statut Membre Dernière intervention   170
 
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   Statut Membre Dernière intervention   13
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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 1290 Date d'inscription   Statut Membre Dernière intervention   170
 
et si ta chaine de caratère est supérieure à help[60] ? ça va seg fault ...
0
JooS Messages postés 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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   Statut Membre Dernière intervention   13
 
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 2468 Date d'inscription   Statut Membre Dernière intervention   228
 
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   Statut Membre Dernière intervention   13
 
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