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 -
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);
}
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:
- C probleme code fonction inverse
- Code ascii - Guide
- Fonction si et - Guide
- Annuaire inversé - Guide
- Ecran inversé - Guide
- Code puk bloqué - Guide
5 réponses
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...
Ca évitera que je me fatigue à écrire ailleurs...
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);
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);
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 !
Mettez en résolu quand c'est résolu -.- ...
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 -.- ...
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; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
en fait ce que je voudrais faire...
c'est avec ma chaine1 (par exemple : bonjour)
mettre dans chaine2 l'inverse (il me mettra "roujnob")
c'est avec ma chaine1 (par exemple : bonjour)
mettre dans chaine2 l'inverse (il me mettra "roujnob")
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; }