Partage
  • Partager sur Facebook
  • Partager sur Twitter

Manipulation de chaine de caractères

sans ce servir de la bibliothèque string.h et des tableaux du type t[]

Sujet résolu
    19 octobre 2020 à 10:37:12

    Bonjour tout le monde 

    Je sollicite votre aide sur un sujet de prog c donné en cours. Je dois manipuler des chaines de caractères sans me servir de string.h et de tableaux du type t[] . Je suis actuellement bloqué sur la concaténation  de 2 chaines de caractères 

    int Longueur(const char *c)
    {
        int x=0;
        for (int i = 0; *(c+i) != '\0'; i++) {
            x++;
        }
        return x;
    }
    char *concat(char *a,char *c, char *c2)
    {
        int i=0;
        int NbCaractere=Longueur(c);
        int NbCaractere2=Longueur(c2);
        printf("Le nombre de caractere est de : %d\n",NbCaractere+NbCaractere2);
        a=(char*)calloc((NbCaractere+NbCaractere2)+1,sizeof(char));
        if(a!=NULL)
        {
            for ( ;i<NbCaractere; i++) {
                *(a+i)=*(c+i);
            }
            printf(" ");
            for ( int j=NbCaractere2;j<NbCaractere+NbCaractere2; j++) {
                *(a+j)=*(c2+j);
            }
    
        }
        return a;
        }
    
    
    
    // Q6
    
    
    
    int main()
    {
        char *a;
        char *c="Salut";
        char *c2="les gars";
        printf("%s",concat(a,c,c2));
        return 0;
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      19 octobre 2020 à 12:01:58

      1) Il est inutile de passer le pointeur a à la fonction concat. Ce qui simplifie son prototype :

      char *concat(char *c, char *c2)

      2) Le transtypage du retour de calloc en C et inutile.

      3) Tu es bien partie pour le début de construction de la chaîne finale (destination), mais c'est au moment de la copie de la seconde chaîne (c2) que ça coince. Tu dois continuer d'utiliser l'indice i pour la chaîne de destination et utiliser l'indice j pour la source c2 de 0 à la taille de la source. 

      * Tu n'as pas droit aux tableaux static sur la pile [] mais tu as peut-être le droit d'utiliser l'opérateur crochet [] sur les pointeurs ?

      • Partager sur Facebook
      • Partager sur Twitter
        19 octobre 2020 à 20:09:21

        Pourquoi utiliser cette écriture
                for ( ;i<NbCaractere; i++) {
        

        avec i initialisé 7 lignes plus haut ? Pourquoi ne pas utiliser la syntaxe de la ligne 22: for(int machin= ?

        Ligne 41bis: il manque un free(a)

        -
        Edité par edgarjacobs 19 octobre 2020 à 20:09:58

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        Manipulation de chaine de caractères

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown