Partage
  • Partager sur Facebook
  • Partager sur Twitter

coller un charactere à une string

Sujet résolu
    22 octobre 2019 à 18:44:31

    Bonjour, 

    J'écrit car j'aurais un probleme, je souhaite envoyer une string a une fonction qui va rajouter des 0 à celle-ci.

    char *cat(char *dest, int size_actuel)
    {
        dest[size_actuel] = '0';
        return (dest);
    }
    char *infinadd(char *str1, char *str2)
    {
        int size_str1 = my_strlen(str1);
        int size_str2 = my_strlen(str2);
        int nb_str1 = 0;
        int nb_str2 = 0;
        int retenu = 0; 
        int result_nb = 0;
        char *str_recup;
        int i = 0;
    
        size_str1 -= 1;
        size_str2 -= 1;
        str_recup = my_malloc(size_str1, size_str2);
    
        while (size_str1 >= 0 || size_str2 >= 0) {
            if (size_str1 < 0)
                str1 = cat(str1, size_str2);
            if (size_str2 < 0)
                str2 = cat(str2, size_str1);
            nb_str1 = my_getnbr_chara(str1[size_str1]);
            nb_str2 = my_getnbr_chara(str2[size_str2]);
            result_nb = result(nb_str1, nb_str2, &retenu);
            str_recup[i] = my_getnbr_rev(result_nb);
            size_str1 -= 1;
            size_str2 -= 1;
            i += 1;
        }
        my_putstr(str1);
        return (str_recup);
    }

    le but du projet est une calculette infini. Et le prb que j'ai pour l'instant est que si mon str1 et mon str2 n'ont pas la meme taille cela m'affiche des characteres bizare. Or pour ça je dois rajouter des 0(charactere) à la string qui a la plus petite taille. Desole si je n'arrive pas à bien m'exprimer.

    Merci


    • Partager sur Facebook
    • Partager sur Twitter
      22 octobre 2019 à 18:55:19

      Un rapport avec ceci dirait-on ...
      • Partager sur Facebook
      • Partager sur Twitter
        22 octobre 2019 à 19:04:14

        oui exactement le meme but de projet mais je n'ai pas l'impression qu'il fasse comme moi et qu'il y est le meme prb
        • Partager sur Facebook
        • Partager sur Twitter
          22 octobre 2019 à 20:30:53

          Ok.

          Comme il n'y a aucun commentaire indiquant précisément le comportement attendu des fonctions, difficile de dire ce qui cloche.

          "Or pour ça je dois rajouter des 0(charactere) à la string qui a la plus petite taille"  pas la peine d'en ajouter plusieurs, le premier rencontré marquera la fin de la chaine.

          • Partager sur Facebook
          • Partager sur Twitter
            22 octobre 2019 à 21:41:08

            oui je comprend, 

            je vous affiche tous le reste du code,

            int my_getnbr_chara(char c)
            {
                int nb = 0;
            
                nb = nb + c - '0';
                return (nb);
            }
            
            char *my_malloc(int size1, int size2)
            {
                char *str;
            
                if (size1 >= size2)
                    str = malloc(sizeof(char) * (size1 + 2));
                if (size2 >= size1)
                    str = malloc(sizeof(char) * (size2 + 2));
                return (str);
            }
            
            int result(int nb1, int nb2, int *retenu2)
            {
                int result = 0;
            
                result = *retenu2 + nb1 + nb2;
                if (result > 9) {
                    result -= 10;
                    *retenu2 = 1;
                } else {
                    *retenu2 = 0;
                }
                return (result);
            }
            
            char my_getnbr_rev(int nb)
            {
                char c;
            
                c = nb + '0';
                return (c);
            }
            
            char *infinadd(char *str1, char *str2)
            {
                int size_str1 = my_strlen(str1);
                int size_str2 = my_strlen(str2);
                int nb_str1 = 0;
                int nb_str2 = 0;
                int retenu = 0;
                int result_nb = 0;
                char *str_recup;
                int i = 0;
            
                size_str1 -= 1;
                size_str2 -= 1;
                str_recup = my_malloc(size_str1, size_str2);
            
                while (size_str1 >= 0 || size_str2 >= 0) {
                    if (size_str1 < 0)
                        str1 = cat(str1, size_str2);
                    if (size_str2 < 0)
                        str2 = cat(str2, size_str1);
                    nb_str1 = my_getnbr_chara(str1[size_str1]);
                    nb_str2 = my_getnbr_chara(str2[size_str2]);
                    result_nb = result(nb_str1, nb_str2, &retenu);
                    str_recup[i] = my_getnbr_rev(result_nb);
                    size_str1 -= 1;
                    size_str2 -= 1;
                    i += 1;
                }
                return (str_recup);
            }

            Donc j'ai décidé de creer une fonction qui getnbr_chara qui va transformer mon '8' charactere en 8 nombre ensuite j'envois les deux nombres recupere par getnbr_chara puis je les envois dans une fonction qui va faire le calcul puis je recupere le resulat de type int et je le retransforme avec getnbr_rev pour le stocker dans une string.

            Le probleme est que si str1 et str2 n'ont pas la meme taille le resulat affiche n'importte quoi. d'ou le fait que je veux rajouter des 0 a ma string. Je ne sais pas si c plus clair comme ça.

            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2019 à 0:42:46

              ClementBolin a écrit:

              Le probleme est que si str1 et str2 n'ont pas la meme taille le resulat affiche n'importte quoi. d'ou le fait que je veux rajouter des 0 a ma string. Je ne sais pas si c plus clair comme ça.

              Oui, c'est plus clair désormais car j'avais mal lu et compris que tu voulais ajouter la valeur 0 et non le caractère 0.

              Comme dans l'autre discussion, je ne comprends pas pourquoi vouv vous acharnez à utiliser des fonctions personnelles dont on ne connait pas le fonctionnement (my_strlen, my_malloc, etc.) au lieu d'utiliser l'existant qui fonctionne pourtant parfaitement.

              De plus, même remarque également, ça manque cruellement de commentaires: pourquoi -1 lignes 53 et 54, pourquoi +2 lignes 14 et 16, etc.? 

              Tu es sur de réserver suffisamment de place pour tous les caractères et le 0 terminal?

              • Partager sur Facebook
              • Partager sur Twitter

              coller un charactere à une string

              × 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