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 :

Fonction pour inverser une chaine de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut Fonction pour inverser une chaine de caractères
    Bonsoir,

    En travaillant sur ce problème qui doit comporte des fonctions de saisie d'une chaine, puis de calcul de l'occ du char c puis d'inverser la chaine mais le programme n"execute pas la fonction inverser et je sais pas pourquoi ou comment le resoudre. de l'aide svp!

    Voici le code :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include <stdio.h>
    #include <stdlib.h>
     
     
    /*probleme*/
     
    /*saisir*/
    char* saisir() {
        int n;
        char* ch;
        printf("saisir la taille de ch:\n");
        scanf("%d", &n);
        printf("saisir votre chaine\n");
        ch = (char*) malloc(n * sizeof(char));
        _flushall();
        gets(ch);
        return (ch);
    }
     
    /*occ*/
     
    int occurance(char* ch) {
        int i;
        int occ = 0;
        for (i = 0; i < strlen(ch); i++) {
            if (ch[i] == 'c')
                occ = occ + 1;
     
        }
        return (occ);
    }
     
    /*fonction inverse*/
     
    char* inverse(char* ch) {
        return (strrev(ch));
    }
     
    /*programme principal*/
    int main() {
        char* ch;
        int occ;
     
        printf("le nb d'occ de char 'c' dans ch =%d\n", occurance(saisir()));
     
        printf("la chaine inversée =%s\n", inverse(ch));
     
        return 0;
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par 3dx2y Voir le message
    mais le programme n"execute pas la fonction inverser et je sais pas pourquoi ou comment le resoudre.
    Il compile déjà??? Parce qu'il fait appel à strrev() qui n'est définie nulle part. Et faire une boucle de 0 à strlen(ch) est la pire des solutions. A chaque itération il recalcule la taille de la chaine. De plus return n'est pas une fonction.

    Citation Envoyé par 3dx2y Voir le message
    voici le code:
    http://club.developpez.com/regles/#LIII-E
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    [QUOTE=Sve@r;11894379]
    bonjour, oui le programme compile et execute correctement les autres fonctions sauf celle de l'inverse j'ai ajouté la commande (faute d'inattention) sinon j'ai changé le code ainsi mais toujourspas d'execution:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    char* inverse(char* ch)
    {
     ch=strrev(ch) ;
     return ch;
    }

  4. #4
    Membre Expert Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 784
    Par défaut
    Hello,

    1)

    2) tu oublies d'allouer de l'espace pour le \0 de fin de chaine

    3) on oublie gets(), qui est complètement deprecated, on utilise fgets() à la place

    4) je ne connais pas _flushall() , mais en général une fonction de flush ne flush que les fichiers en output

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Ligne ???, tu définis un pointeur ch et n'y mets rien. Ligne ???, tu passes ce pointeur à la fonction inverse(). Comment pourrait-elle retourner un résultat sensé?

    Tu alloues une zone pour y placer une chaine, cette zone n'est jamais libérée.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    Citation Envoyé par dalfab Voir le message
    Bonjour,

    Ligne ???, tu définis un pointeur ch et n'y mets rien. Ligne ???, tu passes ce pointeur à la fonction inverse(). Comment pourrait-elle retourner un résultat sensé?

    Tu alloues une zone pour y placer une chaine, cette zone n'est jamais libérée.
    voulez vous dire que je dois changer cette instruction ainsi?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("la chaine inversée =%s\n",inverse(*ch));
    car meme ainsi le code ne s'execute pas j'sais vraiment pas quoi modifier dans le code pour qu'il s'execute.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 3dx2y Voir le message
    voulez vous dire que je dois changer cette instruction ainsi?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("la chaine inversée =%s\n",inverse(*ch));
    Il ne t'a rien dit de changer, il t'a juste posé une question : à quel moment tu remplis "ch" avant de vouloir la renverser ?
    Normalement en répondant à sa question (que j'ai reprise dans mon message précédent) ça devrait t'amener à changer ce qu'il faut comme il le faut.

    Citation Envoyé par 3dx2y Voir le message
    j'sais vraiment pas quoi modifier dans le code pour qu'il s'execute.
    Programmer ce n'est pas mettre du code au pif en espérant qu'il tombera en marche.
    Nom : images.jpg
Affichages : 2075
Taille : 9,7 Ko
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    et voici encore la fenetre d'execution:
    Nom : Capture d'écran_20221118_165638.png
Affichages : 904
Taille : 27,2 Ko

    le problème est juste que le programme n'execute pas la fonction "inverse":

    Programmer ce n'est pas mettre du code au pif en espérant qu'il tombera en marche.
    Nom : images.jpg
Affichages : 2075
Taille : 9,7 Ko[/QUOTE] ouai, j'sais très bien je ne programme pas au hasard,je veux juste comprendre quel est le problème dans mon code et trouver des solutions
    Images attachées Images attachées  

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    Citation Envoyé par edgarjacobs Voir le message
    Hello,

    bonjour,

    2) tu oublies d'allouer de l'espace pour le \0 de fin de chaine

    je suis encore débutante mais je crois que j'ai alloué de l'espace pour toute la chaine en utilisant la syntaxe "malloc" qui par defaut alloue de l'espace pour toute la chaine en prenant compte de /0
    3) on oublie gets(), qui est complètement deprecated, on utilise fgets() à la place
    on travaille toujours avec gets en classe c'est pourquoi j'l'ai utilisé en plus j'ai juste un problème au niveau de la fonction inverse qui ne s'execute pas et je sais pas comment corriger mon code
    4) je ne connais pas _flushall() , mais en général une fonction de flush ne flush que les fichiers en output
    on utilise la commande _flushall() lors d'un saisie de char ou de chaine on l'utilise pour libérer temporairement de l'espace mémoire si on l'utilise pas le code ne s'execute pas.

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 3dx2y Voir le message
    j'ai ajouté la commande <string.h>
    Mouais, super. Vu que ça ce n'est pas une commande...

    Citation Envoyé par 3dx2y Voir le message
    sinon j'ai changé le code ainsi mais toujourspas d'execution:
    Et tu l'as lu le message de dalfalb ()? Parce qu'il est quand-même assez explicite. Regarde ton main. A quel moment tu remplis "ch" que tu tentes ensuite d'inverser???

    Citation Envoyé par 3dx2y Voir le message
    on utilise la commande _flushall() lors d'un saisie de char ou de chaine on l'utilise pour libérer temporairement de l'espace mémoire si on l'utilise pas le code ne s'execute pas.
    Oh là là cette salade qu'il y a dans ta tête. Donc si pas de _flushall() pas de programme???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    c'est bon la fonction inverse fonctionne maintenant. merci beaucoup pour vous tous!!

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 3dx2y Voir le message
    c'est bon la fonction inverse fonctionne maintenant.
    Ce que tu n'as toujours pas pigé, c'est que la fonction a toujours et depuis le début fonctionné parfaitement !!!
    Encore une fois, tu l'appelais sur une variable non remplie donc tu obtenais que dalle. Et c'est dommage qu'on t'ait donné la solution parce que tu ne l'as pas compris tout seul et désormais tu ne le comprends toujours pas.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 22
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ce que tu n'as toujours pas pigé, c'est que la fonction a toujours et depuis le début fonctionné parfaitement !!!
    Encore une fois, tu l'appelais sur une variable non remplie donc tu obtenais que dalle. Et c'est dommage qu'on t'ait donné la solution parce que tu ne l'as pas compris tout seul et désormais tu ne le comprends toujours pas.
    bonsoir, j'ai compris tout vos remarques! oui elle a fonctionné dès le début mais j'ai cru qu'il y avait un priblème quelque part.
    une autre fois, merci beaucoup pour vous tous j'ai bien compris vos remarques! ça m'a bien aidé!

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/09/2019, 00h32
  2. Fonction pour tronquer une chaine de caractère
    Par nekcorp dans le forum Langage
    Réponses: 7
    Dernier message: 29/09/2014, 13h05
  3. [C#] Comment inverser une chaine de caractères ?
    Par just1980 dans le forum Contribuez
    Réponses: 6
    Dernier message: 01/05/2011, 20h35
  4. Appel à une fonction à partir d'une chaine de caractères
    Par becks dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/09/2007, 12h14
  5. Réponses: 23
    Dernier message: 13/11/2006, 03h33

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