IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Inversion d'une chaîne de caractères


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut Inversion d'une chaîne de caractères
    Bonjour tous,
    Bien je voulais faire une fonction inversion de chaîne de caractères, de sorte que "direct" devienne "tcerid", je bloque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    void permuter_ch(char * a, char * b) // à utiliser sous la forme permuter(&a,&b)
    {
        char k;
        k=*a;
        *a=*b;
        *b=k;
    }
     
    char * inverser_ch(char  ch[])
    {
        int i;
        for(i=0;i<strlen(ch)/2;i++)//il suffit de s'arrêter sur strlen(ch)/2, que la chaîne soit de taille paire ou impaire.
        {
            permuter_ch(&ch[i],&ch[strlen(ch)-i-1]);
        }
     
        ch[strlen(ch)]='\0';//nécessaire ?
        return ch;
    }
    int main()
    {
        char * ch="bonjour";
        printf("%s\n",inverser_ch);
     
        return 0;
    }
    Le résultat est une chaîne absurde ! J'attends vos réponses, merci d'avance !

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
        printf("%s\n",inverser_ch);
    Déjà il y a un problème ici , ta fonction inverser_ch ne possède aucun argument ,elle devrait être comme ceci inverser_ch(ch);

    après le reste me semble bon mais permet moi , de te proposer une fonction beaucoup plus lisible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    void fchaine(char *chaine)
    {
        int i,n;
        char lettre;
     
        n = strlen(chaine);
     
        for(i = 0;i <n/2;i++)
        {
            lettre = chaine[i];
            chaine[i] = chaine[n-i-1];
            chaine[n-i-1] = lettre;
        }
    }
     
    int main()
    {
        char *chaine[100];
     
        strcpy(chaine,"bonjours");
     
        fchaine(chaine);
     
        printf("%s\n",chaine);
     
     
        return 0;
    }

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    @bounadalvidal :
    Attention, la chaine ch est non modifiable !

    @Kannagi :
    La définition devrait être
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  4. #4
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    ah oui effectivement petite faute de frappe

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Avec une boucle while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void strinv(char *st)
    {
        char tmp;
        unsigned int d = 0;
        unsigned int f = strlen(st)-1;
        while(d<f)
          {
              tmp = st[d];
              st[d] = st[f];
              st[f]= tmp;
              d++;
              f--;
          }
    }

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par diogene Voir le message
    @bounadalvidal :

    Attention, la chaine ch est non modifiable !

    @Kannagi :

    La définition devrait être
    Je vois, le genre de choses que je ne retiens pas de mon cours et qui pèse lourd plutard... Donc il faudrait invariablement passer par un "tableau de caractères" ? N'y-a-t-il pas moyen d'utiliser les chaines de caractères à part renvoyer une autre chaîne dans la fonction ?

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    N'y-a-t-il pas moyen d'utiliser les chaines de caractères à part renvoyer une autre chaîne dans la fonction ?
    Je ne sais pas si j'ai compris ce que tu veux dire, mais tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ch[]="bonjour";
    inverser_ch(ch);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 63
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par diogene Voir le message
    Je ne sais pas si j'ai compris ce que tu veux dire, mais tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ch[]="bonjour";
    inverser_ch(ch);
    Voilà faudrait donc passer par un "tableau" !
    Merci de votre aide tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Inverser une chaîne de caractères
    Par zbooon dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 28/04/2017, 13h44
  2. Inversion d'une chaîne de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 7
    Dernier message: 31/10/2011, 13h56
  3. Réponses: 3
    Dernier message: 26/05/2010, 23h39
  4. Réponses: 3
    Dernier message: 24/10/2007, 01h47
  5. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo