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

  1. #1
    Membre habitué
    Convertir un nombre en chaîne de caractères
    Bonjour,

    Je cherche à envoyer une variable int à une chaîne, ce qui peut s'avérer utile pour manipuler les fonctions de chaînes

    Ci-après un exemple de code qui ne fonctionne malheureusement pas :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
    {
        int a = 10; // variable à envoyer dans la chaîne ci-dessous
     
        char chaine = (char) a ;
     
        char *c = strstr(&chaine, '0'); // fonction strchr qui cherchera le chiffre 0 dans la chaîne qui vaut ici 10
     
        if (c != NULL)
        {
            printf("\n La chaîne '%c' contient le chiffre '%c' \n",chaine, *c); // si le code fonctionnait ce printf devrait s'afficher
        }
        else
        {
            printf("\n La chaîne '%c' ne contient pas le chiffre '%c' \n",chaine, *c);
        }
     
        return 0;
    }


    Je code avec qt creator, pas de warning avec le code ci-dessus.

    Vous remerciant par avance pour vos lumières,

    Nicolas.

  2. #2
    Rédacteur/Modérateur

    Tout ce que fait ton code c'est convertir un int 10 en un char 10.
    Ce que tu veux faire c'est convertir un nombre en chaîne, et ça se passe avec (s)(n)printf, cf FAQ.
    Tu utilises Qt Creator comme IDE ou tu utilises aussi Qt ?
    Qt a sans aucun doute de nombreuses fonctions pour réaliser tout type de conversion.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre habitué
    Bonjour,

    Merci pour votre réponse, le but du code, envoyer à la fonction un chiffre (10) dans lequel on cherchera si le nombre 0 est présent, la fonction strchr étant capable de chercher un caractère dans une chaîne.

    J'utilise qt creator.

    Je vais regarder du coté de vos liens, puis je reviendrai vous donner les modifications apportées au code,

    bonne journée.

  4. #4
    Rédacteur/Modérateur

    Pour savoir si un chiffre contient un 0 tu pourrais faire un modulo 10 et des division successives.
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    bool has0(int v)
    {
      if (v == 0)
        return true;
      do {
        if (v % 10 == 0)
          return true;
        v /= 10;
      } while (v);
      return false;
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre habitué
    Bonjour,

    sprintf permet d'arriver à mes fins, voir ci-dessous :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
     
    {
        char chaine[255];
     
        int a = 10;
     
        sprintf(chaine, "%d", a);
     
        char *c = strstr(chaine, "0");
     
        if (c != NULL)
        {
            printf("\n La chaîne '%s' contient le chiffre '%c' \n",chaine, *c);
        }
        else
        {
            printf("\n La chaîne '%s' ne contient pas le chiffre 0 \n",chaine);
        }
     
        return 0;
    }


    Encore merci pour vos lumières, je passe le poste en résolu :-)

    Nicolas.

  6. #6
    Membre éprouvé
    Hello,

    Puisque tu ne cherches qu'un seul caractère, utlise strchr(): char *c=strchr(s,'0');

  7. #7
    Membre habitué
    Bonjour,

    Est-ce que tu évoques bien le fait que les apostrophes '0' sont pour un caractère et les guillemets "0" pour une chaîne de caractères ?

    Si oui, sache que qt creator affiche des warning lorsque je code '0' avec les apostrophes alors que c'est pourtant de cette façon que cela devrait être codé...

    de plus le printf demande bien à être codé avec des apostrophes '0' , c'est contradictoire...

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    printf("\n La chaîne '%s' contient le chiffre '%c' \n",chaine, *c);


    Merci pour ta remarque,

  8. #8
    Expert confirmé
    Citation Envoyé par nl.smart Voir le message
    Est-ce que tu évoques bien le fait que les apostrophes '0' sont pour un caractère et les guillemets "0" pour une chaîne de caractères ?
    C'est bien ça la syntaxe du langage, les chaines sont entre guillemets et un simple caractère est forcément entre apostrophes.
    Citation Envoyé par nl.smart Voir le message
    Si oui, sache que qt creator affiche des warning lorsque je code '0' avec les apostrophes alors que c'est pourtant de cette façon que cela devrait être codé...
    Là il y a forcément quelque chose que tu as mal utilisé. Qt ou le compilateur ne décident pas de nouvelle syntaxe!
    Citation Envoyé par nl.smart Voir le message
    de plus le printf demande bien à être codé avec des apostrophes '0' , c'est contradictoire...
    Où sont les apostrophes imposées dans ton exemple?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // je décompose en 2 lignes ton printf
    const char* format = "La chaîne '%s' contient le chiffre '%c'\n";
    printf( format , chaine , *c );
     
    // qui revient à (avec des guillemets autour des chaines)
    printf( "La chaîne %s contient le chiffre %s\n" , "james 007" , "0" );
    // en utilisant les caractères serait :
    printf( "La chaîne %c%c%c%c%c%c%c%c%c contient le chiffre %c\n" , 'j','a','m','e','s',' ','0','0','7' , '0' );

  9. #9
    Rédacteur/Modérateur

    Citation Envoyé par nl.smart Voir le message
    Si oui, sache que qt creator affiche des warning lorsque je code '0' avec les apostrophes alors que c'est pourtant de cette façon que cela devrait être codé...
    T'es sûr que t'utilises bien strchr dans ce cas ? T'as pas laissé ton appel à strstr par hasard ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre habitué
    Bonjour,

    Dalfab, merci pour votre réponse et la confirmation qui va avec.

    Dans mon premier code il n'y avait que des apostrophes, ce code d'ailleurs ne fonctionnait pas, dans le second code, qui fonctionnait avec strstr, apostrophes et guillemets sont associées...

    Bousk, je vous confirme avoir utilisé, par erreur, strstr, voir mes précédents codes.

    Je vous confirme aussi ne plus avoir de warning avec strchr, ce qui n'étais pas le cas dans les 2 codes précédents, et pour cause, il ne me reste plus qu'à faire attention à utiliser correctement les fonctions de chaînes.

    voir code ci-dessous avec la fonction strstr, des apostrophes (Bernard Pivot appréciera :-) et sans warning, svp :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main()
     
    {
        char chaine[9];
     
        int a = 10;
     
        sprintf(chaine, "%d", a); // utilisation de la fonction sprintf pour envoyer le int dans le char
     
        char *c = strchr(chaine, '0');
     
        if (c != NULL)
        {
            printf("\n La chaîne '%s' contient le chiffre '%c' \n",chaine, *c);
        }
        else
        {
            printf("\n La chaîne '%s' ne contient pas le chiffre '0' \n",chaine);
        }
        return 0;
    }


    Super, encore merci pour vos lumières !