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 :

concatenation des chaines


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    bonjour,
    j'ai un exercice difficille pour moi je voudrais que vous m'aidez a le resoudre:
    je voudrais creer un programme qui concatene deux chaines de carecteres, representant par exemple prénom et nom.
    pour stocker les données, de type chaîne de carectère de chaque chaîne est fixé à 10. Pour le resultat, je voudrais seulment le voir imprimé :
    la place qu'il occupe est attribuée dynamiquement puis libérée.

    je vous remercie

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Eh bien quel est ton problème pour cet exercice ?
    • Un problème d'allocation dynamique ?
    • Un problème de longueur ?
    • Un problème de recopie ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Citation Envoyé par Médinoc Voir le message
    Eh bien quel est ton problème pour cet exercice ?
    • Un problème d'allocation dynamique ?
    • Un problème de longueur ?
    • Un problème de recopie ?

    je suis entraine d'apprendre le language C, j'ai une serie d'exercice que je voulaiq le resoudre si ça vous darange pas de m'aidez ce sera gentille de votre part.

    Cordialement

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Sur dvp.com, on ne fera pas ton exercice pour toi.
    Mais on t'aidera. Il suffit que tu postes ton code actuel et que tu indiques les points surs lesquels tu as des problèmes.
    1. Normalement, tu es censé savoir ce qu'est l'allocation dynamique, non ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Citation Envoyé par Médinoc Voir le message
    Sur dvp.com, on ne fera pas ton exercice pour toi.
    Mais on t'aidera. Il suffit que tu postes ton code actuel et que tu indiques les points surs lesquels tu as des problèmes.
    1. Normalement, tu es censé savoir ce qu'est l'allocation dynamique, non ?
    oui tu as raison
    je vais essayer de le faire apré je vous l'envoies sachant que je sais pas comment debuter.

    cordialement

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Est-ce que tu as le droit(car cela arrive que ce ne soit pas le cas) d'utiliser la librairie standard du C ?

    Ensuite as-tu un mini algo qui permet de décrire ce que tu dois programmer ? (avec toutes les variables dont tu as besoin, les fonctions etc..)
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Citation Envoyé par hegros Voir le message
    Est-ce que tu as le droit(car cela arrive que ce ne soit pas le cas) d'utiliser la librairie standard du C ?

    Ensuite as-tu un mini algo qui permet de décrire ce que tu dois programmer ? (avec toutes les variables dont tu as besoin, les fonctions etc..)
    Oui j'ai le droit d'utilisé la librairie standard du C.

  8. #8
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Tu sais (ce n'est pas une nouveauté) mais tu as une fonction qui permet de réaliser la concaténation que tu trouveras dans string.h. Elle s'appelle strcat avec sa cousine strncat tu peux les utiliser pour ton prg.
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    salut,
    je voudrais que vous m'aider voila mon Prog qui donne des bonne resultat (concatenation des chaines):

    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
    #include <stdio.h>
    # include <stdlib.h>
    #include <string.h>
    int main (){
     
      char prenom [10];
      printf("Donnez une chaine de caracteres (10 caracteres au maximum): ")  ;
      scanf("%s",prenom);
      printf("%s\n",prenom);
     
      char nom[10];
      puts("Donnez une chaine de caracteres (10 caracteres au maximum):");
      scanf("%s",nom);
      char *ens=malloc((strlen(prenom)+strlen(nom))*sizeof(char));
      int i; 
      for(i=0;i<strlen(nom)-1;i++)
        printf("%c",nom[i] );
     
     
        for(i=0;i<strlen(*prenom)-1;i++)
        ens[i]=prenom[i];
     
        for(i=0;i<strlen(*nom);i++)
        ens[i+strlen(*prenom)]=nom[i];
     
        printf("%s",ens);
     
      return 0;
     
    }
    Je vous remercie en avance

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Je suis desolé le programme ne donne pas des bonne resultats.



    Cordialement

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Citation Envoyé par Médinoc Voir le message
    Sur dvp.com, on ne fera pas ton exercice pour toi.
    Mais on t'aidera. Il suffit que tu postes ton code actuel et que tu indiques les points surs lesquels tu as des problèmes.
    1. Normalement, tu es censé savoir ce qu'est l'allocation dynamique, non ?
    salut,
    je voudrais que vous me corriger ce code voila:

    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
    #include <stdio.h>
    # include <stdlib.h>
    #include <string.h>
    int main (){
     
      char prenom [10];
      printf("Donnez une chaine de caracteres (10 caracteres au maximum): ")  ;
      scanf("%s",prenom);
      printf("%s\n",prenom);
     
      char nom[10];
      puts("Donnez une chaine de caracteres (10 caracteres au maximum):");
      scanf("%s",nom);
      char *ens=malloc((strlen(prenom)+strlen(nom))*sizeof(char));
      int i; 
      for(i=0;i<strlen(nom)-1;i++)
        printf("%c",nom[i] );
     
     
        for(i=0;i<strlen(*prenom)-1;i++)
        ens[i]=prenom[i];
     
        for(i=0;i<strlen(*nom);i++)
        ens[i+strlen(*prenom)]=nom[i];
     
        printf("%s",ens);
     
      return 0;
     
    }

    merci

  12. #12
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Voici un point de départ pour orienter tes corrections. Mon compilateur me retourne les erreurs et avertissements suivants:

    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
    gcc -o test.o -c -Wall -Wextra -ansi -pedantic -Wwrite-strings -Wstrict-prototypes -Wunreachable-code test.c
    test.c:6: warning: function declaration isn't a prototype
    test.c: In function 'main':
    test.c:13: warning: ISO C90 forbids mixed declarations and code
    test.c:16: warning: ISO C90 forbids mixed declarations and code
    test.c:18: warning: implicit declaration of function 'or'
    test.c:18: error: expected ')' before ';' token
    test.c:19: error: expected ';' before 'printf'
    test.c:22: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
    test.c:22: warning: comparison between signed and unsigned
    test.c:25: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
    test.c:25: warning: comparison between signed and unsigned
    test.c:26: warning: passing argument 1 of 'strlen' makes pointer from integer without a cast
    scons: *** [test.o] Error 1
    scons: building terminated because of errors.
    Bon courage

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #13
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Voici quelques corrections:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void fclean(char *s_buffer, FILE *fp);
     
    int main(void)
    {
        /* -tc- En C90, il est necessaire de définir les variables au
         * debut d'un bloc.
         */
        char prenom[10] = "";
        char nom[10] = "";
        char *ens = NULL;
        int ret = EXIT_SUCCESS;
     
        /* -tc- Attention, les tableaux de caractères prenom et nom sont
         * limites a 9 caracteres, le 10eme etant reserve au caractere nul.
         */
        printf("Donnez une chaine de caracteres (10 caracteres au maximum): ") ;
        /* -tc- on force l'affichage de l'invite */
        fflush(stdout);
        /* -tc- Il n'est pas conseille d'utiliser scanf() pour la saisie de chaines
         * de caracteres formatees. Essaie plutot avec fgets()
        scanf("%s",prenom); */
        fgets(prenom, sizeof prenom, stdin);
        fclean(prenom, stdin);
        printf("%s\n", prenom);
     
        puts("Donnez une chaine de caracteres (10 caracteres au maximum): ");
        fflush(stdout);
        fgets(nom, sizeof nom, stdin);
        fclean(nom, stdin);
     
        /* -tc- Attention d'allouer l'espace pour le caractere nul de fin de 
         * chaine. Par ailleurs, sizeof(char) vaut 1 par definition.
         */
        ens = malloc((strlen(prenom) + 1 + strlen(nom) + 1) * sizeof *ens);
        /* -tc- TOUJOURS verifier que l'allocation a reussi */
        if (ens != NULL)
        {
            ens[0] = 0;
            strcat(ens, prenom);
            strcat(ens, " ");
            strcat(ens, nom);
            printf("%s\n",ens);
            /* -tc- on finit par libérer l'espace alloué dynamiquement */
            free(ens), ens = NULL;
        }
        else
        {
            fprintf(stderr, "Erreur d'allocation!\n");
            ret = EXIT_FAILURE;
        }
     
        return ret;
    }
     
    /**
     * Elimine le caractere de fin de ligne saisi par fgets() et fait le menage
     * sur le flux entrant en cas de saisie tronquee.
     */
    void fclean(char *s_buffer, FILE *fp)
    {
        if (s_buffer != NULL && fp != NULL)
        {
            char *pc = strchr(s_buffer, '\n');
     
            if (pc != NULL)
            {
                *pc = 0;
            }
            else
            {
                int c;
     
                while ((c = fgetc(fp)) != '\n' && c != EOF)
                {
                }
            }
        }
    }
    EDIT: libération de la mémoire allouée. Oups!

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 31
    Points : 25
    Points
    25
    Par défaut concatenation des chaines
    Citation Envoyé par Thierry Chappuis Voir le message
    Voici quelques corrections:

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void fclean(char *s_buffer, FILE *fp);
     
    int main(void)
    {
        /* -tc- En C90, il est necessaire de définir les variables au
         * debut d'un bloc.
         */
        char prenom[10] = "";
        char nom[10] = "";
        char *ens = NULL;
        int ret = EXIT_SUCCESS;
     
        /* -tc- Attention, les tableaux de caractères prenom et nom sont
         * limites a 9 caracteres, le 10eme etant reserve au caractere nul.
         */
        printf("Donnez une chaine de caracteres (10 caracteres au maximum): ") ;
        /* -tc- on force l'affichage de l'invite */
        fflush(stdout);
        /* -tc- Il n'est pas conseille d'utiliser scanf() pour la saisie de chaines
         * de caracteres formatees. Essaie plutot avec fgets()
        scanf("%s",prenom); */
        fgets(prenom, sizeof prenom, stdin);
        fclean(prenom, stdin);
        printf("%s\n", prenom);
     
        puts("Donnez une chaine de caracteres (10 caracteres au maximum): ");
        fflush(stdout);
        fgets(nom, sizeof nom, stdin);
        fclean(nom, stdin);
     
        /* -tc- Attention d'allouer l'espace pour le caractere nul de fin de 
         * chaine. Par ailleurs, sizeof(char) vaut 1 par definition.
         */
        ens = malloc((strlen(prenom) + 1 + strlen(nom) + 1) * sizeof *ens);
        /* -tc- TOUJOURS verifier que l'allocation a reussi */
        if (ens != NULL)
        {
            ens[0] = 0;
            strcat(ens, prenom);
            strcat(ens, " ");
            strcat(ens, nom);
            printf("%s\n",ens);
        }
        else
        {
            fprintf(stderr, "Erreur d'allocation!\n");
            ret = EXIT_FAILURE;
        }
     
        return ret;
    }
     
    /**
     * Elimine le caractere de fin de ligne saisi par fgets() et fait le menage
     * sur le flux entrant en cas de saisie tronquee.
     */
    void fclean(char *s_buffer, FILE *fp)
    {
        if (s_buffer != NULL && fp != NULL)
        {
            char *pc = strchr(s_buffer, '\n');
     
            if (pc != NULL)
            {
                *pc = 0;
            }
            else
            {
                int c;
     
                while ((c = fgetc(fp)) != '\n' && c != EOF)
                {
                }
            }
        }
    }
    Thierry
    ça marche bien
    Je te remercie beaucoup plus l'infini.

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

Discussions similaires

  1. Concatenation des chaines contenant le caractère +
    Par ammah dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 27/04/2011, 14h07
  2. [SQL] : Concatener des chaines de caractères
    Par basto dans le forum VBA Access
    Réponses: 2
    Dernier message: 30/04/2007, 16h47
  3. [C++.net]Concatener des chaines de caractère
    Par Dlyan dans le forum MFC
    Réponses: 3
    Dernier message: 27/03/2006, 15h25
  4. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43
  5. Extraire des chaines d'un RES
    Par Dumont dans le forum Langage
    Réponses: 2
    Dernier message: 20/08/2002, 08h13

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