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 :

probléme avec la concaténation de 2 chaines


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut probléme avec la concaténation de 2 chaines
    Salut les amis je dois faire un programme sans la biblio string.h qui lit un alphabet et après un mot et dit s'il appartient à cet alphabet puis calculer sa longueur ... et saisir 2 mot et vérifie s'ils sont identique et puis faire la concaténation et là mon problème il m'affiche des caractères bizarre d'après la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Contruire un Alphabet :
    azerty
    Affichage de l'alphabet :
    azerty
    Saisir une chaine :
    aderty
    Pas un mot
    La longeur est 6
    Saisir deux mot :
    1 : foot
    2 : gloire
    Pas Indentique
    footgloireU†x╣U†♠☻ /*ici*/
    voila lmon 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
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #include<stdio.h>
    #include<stdlib.h>
     
    #define N 100
     
    void sup(char mot[]);       
    void est_mot(char mot1[],char T[]);
    int longeur(char mot1[]);
    void egal(char mot2[] , char mot3[] );
    void con(char mot2[] , char mot3[] );   
     
    main()
    {
          int k ;            
          char T[N] ;
          char mot1[N];
          char mot2[N];
          char mot3[N];
     
          printf("Contruire un Alphabet :\n");  
          fgets(T,N,stdin);
          printf("Affichage de l'alphabet :\n%s",T);
     
          printf("Saisir une chaine :\n");
          fgets(mot1 , N , stdin);
          sup(mot1);
     
          est_mot(mot1,T);
     
          printf("La longeur est %d\n",longeur(mot1)); 
     
          printf("Saisir deux mot :\n");
          printf("1 : ");
          fgets(mot2 , N , stdin);
          printf("2 : ");
          fgets(mot3 , N , stdin);
          sup(mot2);
          sup(mot3);
     
          egal( mot1 , mot2 );
     
          con ( mot2 , mot3 );
    getch();
    }
     
     
    void sup(char mot[])
    {
             int i ;
             for( i=0 ; mot[i] != '\0' ; i++ );
             mot[i-1] = '\0' ;
    }
     
     
    void est_mot(char mot1[],char T[])
    {
         int i , j , trouve , m=0 , n=0 ;
     
     
         for( i=0 ; mot1[i] != '\0' ; i++ )
         {
              m++ ;
              trouve = 0 ;
              for( j=0 ; ((T[j] != '\0') && ( trouve == 0 )) ; j++ )
              {
                   if( T[j] == mot1[i])
                   {
                   trouve = 1 ;
                   n++;
                   }
              }         
         }
         if( n == m)
         printf("un mot\n");
         else
         printf("Pas un mot\n");
    }  
     
    int longeur(char mot1[])
    {
     
         int i , m=0 ;
     
         for( i=0 ; mot1[i] != '\0' ; i++ )
         m++ ;
     
         return m ;
    }
     
    void egal(char mot2[] , char mot3[] )
    {
     
         int m=0 , i ;
         if( longeur(mot2) == longeur(mot3) )
         {
             for( i=0 ; i<longeur(mot3) ; i++ )
             if( mot2[i] == mot3[i] )
             m++;
     
             if( longeur(mot3) == m )
             printf("Indentique\n");
             else
             printf("Pas Indentique\n");
     
     
         }
         else
         printf("Pas Indentique\n");
    }
     
    void con(char mot2[] , char mot3[] )
    {
         int i , m = longeur(mot2) ;
     
         for(i=0 ; i < longeur(mot3) ; i++)
         mot2[ m + i ] = mot3[i] ;
     
         printf("%s\n",mot2);
     
    }

  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
    Citation Envoyé par yous18 Voir le message
    Salut les amis je dois faire un programme sans la biblio string.h qui lit un alphabet et après un mot et dit s'il appartient à cet alphabet puis calculer sa longueur ... et saisir 2 mot et vérifie s'ils sont identique et puis faire la concaténation et là mon problème il m'affiche des caractères bizarre d'après la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Contruire un Alphabet :
    azerty
    Affichage de l'alphabet :
    azerty
    Saisir une chaine :
    aderty
    Pas un mot
    La longeur est 6
    Saisir deux mot :
    1 : foot
    2 : gloire
    Pas Indentique
    footgloireU†x╣U†♠☻ /*ici*/
    voila lmon 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
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #include<stdio.h>
    #include<stdlib.h>
     
    #define N 100
     
    void sup(char mot[]);       
    void est_mot(char mot1[],char T[]);
    int longeur(char mot1[]);
    void egal(char mot2[] , char mot3[] );
    void con(char mot2[] , char mot3[] );   
     
    main()
    {
          int k ;            
          char T[N] ;
          char mot1[N];
          char mot2[N];
          char mot3[N];
     
          printf("Contruire un Alphabet :\n");  
          fgets(T,N,stdin);
          printf("Affichage de l'alphabet :\n%s",T);
     
          printf("Saisir une chaine :\n");
          fgets(mot1 , N , stdin);
          sup(mot1);
     
          est_mot(mot1,T);
     
          printf("La longeur est %d\n",longeur(mot1)); 
     
          printf("Saisir deux mot :\n");
          printf("1 : ");
          fgets(mot2 , N , stdin);
          printf("2 : ");
          fgets(mot3 , N , stdin);
          sup(mot2);
          sup(mot3);
     
          egal( mot1 , mot2 );
     
          con ( mot2 , mot3 );
    getch();
    }
     
     
    void sup(char mot[])
    {
             int i ;
             for( i=0 ; mot[i] != '\0' ; i++ );
             mot[i-1] = '\0' ;
    }
     
     
    void est_mot(char mot1[],char T[])
    {
         int i , j , trouve , m=0 , n=0 ;
     
     
         for( i=0 ; mot1[i] != '\0' ; i++ )
         {
              m++ ;
              trouve = 0 ;
              for( j=0 ; ((T[j] != '\0') && ( trouve == 0 )) ; j++ )
              {
                   if( T[j] == mot1[i])
                   {
                   trouve = 1 ;
                   n++;
                   }
              }         
         }
         if( n == m)
         printf("un mot\n");
         else
         printf("Pas un mot\n");
    }  
     
    int longeur(char mot1[])
    {
     
         int i , m=0 ;
     
         for( i=0 ; mot1[i] != '\0' ; i++ )
         m++ ;
     
         return m ;
    }
     
    void egal(char mot2[] , char mot3[] )
    {
     
         int m=0 , i ;
         if( longeur(mot2) == longeur(mot3) )
         {
             for( i=0 ; i<longeur(mot3) ; i++ )
             if( mot2[i] == mot3[i] )
             m++;
     
             if( longeur(mot3) == m )
             printf("Indentique\n");
             else
             printf("Pas Indentique\n");
     
     
         }
         else
         printf("Pas Indentique\n");
    }
     
    void con(char mot2[] , char mot3[] )
    {
         int i , m = longeur(mot2) ;
     
         for(i=0 ; i < longeur(mot3) ; i++)
         mot2[ m + i ] = mot3[i] ;
     
         printf("%s\n",mot2);
     
    }
    Parce que ta fonction con() s'arrête au dernier caractère et n'écrit pas le '\0' final. Remplace i< longueur(mot3) par i<=longueur(mot3) et tout marchera.

    PS: Dans ta fonction longueur(), pourquoi tu ne renvoies pas simplement "i" ???
    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 très actif
    Inscrit en
    Août 2007
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 260
    Par défaut
    merci Sve@r t'a raison il faut aller jusqu'à longeur(mot3)+1 ...et aussi pour le i
    je vais continuer avec les questions restantes .

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/02/2010, 20h57
  2. [AC-2007] Problème avec champs concaténé dans 1 formulaire
    Par Peter K. dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/08/2009, 17h09
  3. Réponses: 2
    Dernier message: 07/06/2008, 16h23
  4. Réponses: 4
    Dernier message: 18/10/2005, 07h48
  5. Liste déroulante chainée : problème avec value
    Par jpascal dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/08/2005, 21h06

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