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 381
    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 381
    Points : 41 582
    Points
    41 582
    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 ?

  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 381
    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 381
    Points : 41 582
    Points
    41 582
    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 ?

  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 723
    Points
    5 723
    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..)

  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 723
    Points
    5 723
    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.

  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

  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

  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