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 :

Convertir un nombre en chaîne de caractères


Sujet :

C

  1. #1
    Membre confirmé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 155
    Points : 534
    Points
    534
    Par défaut 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


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    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 confirmé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 155
    Points : 534
    Points
    534
    Par défaut
    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


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    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 confirmé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 155
    Points : 534
    Points
    534
    Par défaut
    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 expérimenté Avatar de edgarjacobs
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 623
    Points : 1 551
    Points
    1 551
    Par défaut
    Hello,

    Puisque tu ne cherches qu'un seul caractère, utlise strchr(): char *c=strchr(s,'0');
    On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent

  7. #7
    Membre confirmé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 155
    Points : 534
    Points
    534
    Par défaut
    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 éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    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


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 963
    Points
    32 963
    Billets dans le blog
    4
    Par défaut
    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 confirmé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 155
    Points : 534
    Points
    534
    Par défaut
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WM20] Envoyer une chaîne d'un pc vers smartphone android
    Par dakota77 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 06/04/2016, 21h38
  2. [Applet] Comment envoyer une variable php au java?
    Par abstractor77 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 09/03/2006, 10h18
  3. Envoyer une variable (VARG) à un fichier PERL
    Par Tizard dans le forum Langage
    Réponses: 1
    Dernier message: 20/02/2006, 00h55
  4. envoyer une variable(un tableau) via un lien href
    Par sebduduf dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 11/11/2005, 16h52
  5. Envoyer une variable dans un état
    Par uskiki85 dans le forum Access
    Réponses: 5
    Dernier message: 13/10/2005, 21h44

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