Concaténation de la chaine de caractères
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

Concaténation de la chaine de caractères



  1. #1
    Olympe02

    Smile Concaténation de la chaine de caractères


    ------

    Bonsoir tout le monde,

    Pouvez vous m'aider à comprendre comment afficher: " le code postal de paris est 75"

    Voici mon code:

    Code:
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
       int cp = 75;
       string nom = "Paris";
       string phrase = ??; // je bloque ici je ne sais pas ce qu'il faut mettre 
       cout << phrase << endl;
    
        return 0;
    }
    Merci d'avance
    Bonne soirée

    -----

  2. #2
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    Sur ce coup là je ne peux pas aider, c'est vraiment du C++ et pas du C. Par contre ta nouvelle question laisse à penser que tu n'as pas de livre pour apprendre. Je le dis et je le répète: Le C(++) s'apprend avec un livre, pas en cinq minutes avec deux tutoriels sur internet. En faisant de cette manière tu n'auras jamais des bases solides.

  3. #3
    Olympe02

    Re : Concaténation de la chaine de caractères

    Citation Envoyé par grosmatou75001 Voir le message
    Sur ce coup là je ne peux pas aider, c'est vraiment du C++ et pas du C. Par contre ta nouvelle question laisse à penser que tu n'as pas de livre pour apprendre. Je le dis et je le répète: Le C(++) s'apprend avec un livre, pas en cinq minutes avec deux tutoriels sur internet. En faisant de cette manière tu n'auras jamais des bases solides.
    C'est mon cours Je sais ils sont bizarres mes cours

  4. #4
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    Ah ok, en regardant le profile je comprends. Franchement, si cela t'intéresse vraiment un bon bouquin c'est une bonne investition. Si par contre tu veux faire autre chose plus tard et que tu veux juste "survivre" aux examens internet peut suffire mais les recherches etc. ça peut être casse-pieds.

    (Par contre, pour revenir à l'autre sujet, un cours qui parle de "cases de mémoire" franchement je ne sais pas trop... C'est pas vraiment faux, mais quand même.)

  5. A voir en vidéo sur Futura
  6. #5
    Olympe02

    Re : Concaténation de la chaine de caractères

    ok bon ben je vais essayer de suivre un max et réviser en parallèle les cours dans les livres ! J'ai que des livres sur le langage C mais là on commence par le C++. Tu peux me conseiller le bouquin stp.
    Non je veux avoir une très bonne note pas simplement survivre Sinon je ne serai pas là entrain de revoir mes cours

  7. #6
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    Désolé, comme je ne connais pas le C++ je n'ai pas de livre à conseiller.

    Bon courage.

  8. #7
    galerien69

    Re : Concaténation de la chaine de caractères

    bj,

    renseignes toi sur les initialisations de string
    En l'occurrence, tu veux écrire quelquechose de la forme
    string phrase = "le code postal de "+nom+" est ";

  9. #8
    12Pierre44

    Re : Concaténation de la chaine de caractères

    Bonjour,
    Il ne faut jamais oublier que le C++, c'est d'abord du C.
    Quand vous écrivez
    string nom = "Paris";
    Expliquez en détails ce que vous faites, en particulier ce qu'est "string".
    Si vous aviez dû écrire ce code en C, qu'auriez-vous écrit ?

  10. #9
    galerien69

    Re : Concaténation de la chaine de caractères

    Cessons de débiter des énormités.
    C++ ce n'est pas du C. C'est compatible avec un compilateur C mais c'est tout.

    Ecrire un code en C n'a rien à voir avec écrire un code en C++.
    Ici, il suffit d'utiliser basiquement un stream operator std::cout<<...<<....<<std::end l; dont la syntaxe n'a strictement rien à voir avec un printf ou autre.

    Enfin, expliquer string en détail n'est pas chose facile, etre en détail est trop flou. S'agit-il de l'implem de la classe (s'il s'agit d'une classe), de ce que permet de faire string. Le premier cas est déjà hardu pour un développeur lambda. Le deuxième est inutile. On se contrefout de connaitre resize ou autre. Seuls les constructeurs, operator=/operator+ nous intéresse. Et encore.

    Bref par dessus tout, il faut arreter de dire C/C++, c'est un grossier amalgame. On fait du C OU du C++, si on sait faire les deux c'est bien, mais pas dans le même code, c'est mieux.

  11. #10
    bisou10

    Re : Concaténation de la chaine de caractères

    Salut,

    Le C++ n'est pas du C. On passe d'une programmation fonctionnelle à une programmation objet, et ca change vraiment tout. De mon côté, je conseille vraiment d'oublier le C quand on passe au C++, et de se concentrer sur la POO.

    Après, c'est clair qu'un compilateur C++ va accepter du copié/collé de C et même le compiler, mais on ne code pas en C++ dans ce cas là

  12. #11
    12Pierre44

    Re : Concaténation de la chaine de caractères

    Bonjour,
    @ Galérien et Bisou,
    Vous paraissez bien sûr de vous.
    Mais vous semblez oublier un point fondamental : la différence entre un langage et une logique de programmation.
    Vos fameux opérateurs << et >> ne sont qu'une surcharge d'opérateur existants dans le langage C.
    Quant à remplacer printf par cout, j'ai fait des essais quand j'ai commencé avec le C++ (il y a bien longtemps), et j'en suis resté au printf. Par ailleurs j'ai fait des tests de vitesse, c'est du simple au double.
    Par ailleurs, sur le plan strict de la définition d'un langage, ni printf ni cout ne sont des mots-clé de langage ni des opérateurs, mais des fonctions de bibliothèque.
    Enfin, cette discussion ne peut qu'affoler Olympe02, or il demande de l'aide.

    Voila ce qu'on pourrait dire sur la ligne
    string nom = "Paris";
    Le mot "string" est le nom d'une classe. Un classe est un ensemble de définitions, comme une structure en C, et de fonctions. Une classe a forcément un constructeur et normalement un destructeur. La classe string est un peu particulière par rapport aux autres, elle est munie de l'opérateur '+' qui effectue la concaténation de 2 chaines déclarées "string".
    etc.

  13. #12
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    Citation Envoyé par bisou10 Voir le message
    Après, c'est clair qu'un compilateur C++ va accepter du copié/collé de C et même le compiler,
    Pas sûr!

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    {
    	int *p=malloc(5);
    	return 0;
    }
    en C: pas de soucis
    en C++: error: invalid conversion from void* to int*

    GCC 4.4.3

    Enfin bref, tout ça c'est finalement HS et ne fera qu'embrouiller Olympe02...

  14. #13
    bisou10

    Re : Concaténation de la chaine de caractères

    Toi, tu cherches à embrouiller OP

    Ceci dit, le prototype de malloc() c'est void* malloc (size_t), donc tu devrais avoir *au moins* un warning avec GCC -Wall. Donc ton exemple est déjà 'defective by design'

    Du moins, en toute rigueur.

  15. #14
    bisou10

    Re : Concaténation de la chaine de caractères

    et sur C89 et C99. Après selon le man de malloc son comportement peut être modifié par des variables d'environnement, ce qui signifie que tu as une inférence de type sur ton 5 qui renvoie un int*, de la même façon qu'un size_of(char) peut renvoyer un char*, mais je ne suis pas certain que ca ne soit pas GCC et ses flags + les variables d'environnement qui empêchent ce warning de remonter.

  16. #15
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    Ah, le C et ses subtilités...

    Donc ton exemple est déjà 'defective by design'
    Je ne suis pas d'accord. Dans le K&R il est à mon avis écrit clairement qu'on peut convertir void* vers n'importe quel autre pointeur sans cast. Je pense à cette phrase dans le $A6.8 p. 199
    Unlike the pointer-to-pointer conversions discussed in $A6.6 [Pointers and Integers], which generally require an explicit cast, pointers may be assigned to and from pointers of type void* [...]
    Donc mon example est bon. D'ailleurs je n'arrive pas à faire cracher à GCC un warning sur la question (le seul truc qu'il me dit c'est unused variable), même avec gcc -Wall -Wextra -pedantic -o test.o test.c. Y a-t-il un expert dans la salle?

    un size_of(char) peut renvoyer un char*
    Heu.. Pardon? Un size_of retourne un nombre, pas un pointeur?

    @Olympe02
    Pardon, on est en train de se perdre dans les subtilités sans intérêt pour un débutant. Si tu revient sur le sujet je laisserai aussi tôt tomber ces discussions HS et on reviendra sur ta question (mais j'ouvrirai peut-être un topic à part...).

  17. #16
    Jack
    Modérateur

    Re : Concaténation de la chaine de caractères

    Par ailleurs, sur le plan strict de la définition d'un langage, ni printf ni cout ne sont des mots-clé de langage ni des opérateurs, mais des fonctions de bibliothèque.
    cout n'est pas une fonction mais une instance de la classe istream, un objet quoi.

    A+

  18. #17
    12Pierre44

    Re : Concaténation de la chaine de caractères

    Citation Envoyé par Jack Voir le message
    cout n'est pas une fonction mais une instance de la classe istream, un objet quoi.

    A+
    Pardon pour l'erreur de terme, effectivement, c'est un objet.

  19. #18
    bisou10

    Re : Concaténation de la chaine de caractères

    Citation Envoyé par grosmatou75001 Voir le message
    Ah, le C et ses subtilités...

    Je ne suis pas d'accord. Dans le K&R il est à mon avis écrit clairement qu'on peut convertir void* vers n'importe quel autre pointeur sans cast. Je pense à cette phrase dans le $A6.8 p. 199

    Donc mon example est bon. D'ailleurs je n'arrive pas à faire cracher à GCC un warning sur la question (le seul truc qu'il me dit c'est unused variable), même avec gcc -Wall -Wextra -pedantic -o test.o test.c. Y a-t-il un expert dans la salle?
    Il y a bien longtemps que je n'ai pas lu K&R, mais les normes Cxx ayant fortement évolués, il faudrait que tu précises à laquelle cela s'applique, et voir si c'est toujours valable en C99 par exemple. Il y a de fortes chances que ça soit le cas, sinon GCC cracherait un warning.

    Citation Envoyé par grosmatou75001 Voir le message
    Heu.. Pardon? Un size_of retourne un nombre, pas un pointeur?
    Tu comprends bien que ce que je voulais dire, qui rejoins ton point précédent, c'est que malloc(sizeof(char)) va renvoyer un char * ...

  20. #19
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    il faudrait que tu précises à laquelle cela s'applique
    Houla, les différentes évolutions du C (et encore moins du C++) j'y connais rien... Mais bon, ça m'étonnerai qu'ils aient changé un point tellement fondamental comme l'utilisation de malloc ou des pointeurs void*... Pour moi tant que le GCC accepte ce que j'écris c'est bon...

    Tu comprends bien que ce que je voulais dire,
    Ah non désolé, sinon j'aurais pas demandé.

    c'est que malloc(sizeof(char)) va renvoyer un char *
    Heu non, un void*. Ou alors parle-tu de C++? La c'est possible, j'y connais rien.

  21. #20
    12Pierre44

    Re : Concaténation de la chaine de caractères

    Dans tous les cas malloc revoie un pointeur.
    En C, assez peu stricte sur le typage, malloc revois un pointeur du type void (ie non précisé).
    Le C++ est plus stricte, il faut donc faire un transtypage, par exemple
    int *Tab=(int*)malloc(lTab*sizeof( int));
    Mon compilateur est assez ancien, mais ça m'étonnerait aussi que ça ait changé.

  22. #21
    grosmatou75001

    Re : Concaténation de la chaine de caractères

    On est d'accord 12Pierre44. Je bloquais juste un peu sur le fait que d'après bisou10 mon exemple (en C sans cast) n'est pas valide (defective by design comme il disait), ce qui à priori est faux (l'erreur étant humaine). Si je comprends bien ton message en C++ (insistance sur le ++) malloc renvoye aussi void*, sauf que en C++ la conversion implicite vers char*, int* ou autre n'est plus permise. Ca confirme ce que dis google, donc tout va bien pour moi. Bonne soirée.

  23. #22
    galerien69

    Re : Concaténation de la chaine de caractères

    Tout ne va pas bien pour moi.
    1) en C++, on utilise pas malloc mais new.
    2) Mais vous semblez oublier un point fondamental : la différence entre un langage et une logique de programmation.
    Qu'est-ce qu'il faut pas entendre comme ..... Parce que les templates c'est propre au C peut être? Parce que cout c'est pas du template peut-être?
    3) Vos fameux opérateurs << et >> ne sont qu'une surcharge d'opérateur existants dans le langage C.
    De mieux en mieux.
    4)Le mot "string" est le nom d'une classe.
    C'est bien tenté, mais non. string c'est le nom d'un fichier. Ou bien d'un typedef vers basic_string.
    5)Une classe a forcément un constructeur et normalement un destructeur
    Une classe a forcément un constructeur ET un destructeur. Si non fournis par l'utilisateur ils sont par défaut définis par le compilateur.

    Mon but c'est pas de dire que tu dis que de la m****, mais de bien faire comprendre que C++ et C sont des langages différents, avec des spécificités différentes. Je t'invite toutefois à revoir ta connaissance du C++, du moins pour autrui de cesser de prétendre que C++ c'est du C avec du bricolage par dessus comme le laissent entendre tes propos précédents.
    Dernière modification par galerien69 ; 10/09/2013 à 20h12. Motif: conjugaison

  24. #23
    bisou10

    Re : Concaténation de la chaine de caractères

    @grosmatou75001:

    Oui, ton explication est convaincante, même si in-fine, je ne sais pas si c'est réellement admis sans cast explicite dans les nouvelles versions de C (on s'en doute fortement vu qu'il n'y a pas de warning, et que K&R traite spécifiquement ce point ^^). Je soulignais juste que sans ces précisions un peu tirées par les cheveux, le fait que ca ne compile pas pouvait avoir une cause différente.

    @12pierre44: là, non je confirme. Je ne confonds pas langage et paradigme, mais dans le cas de ces 2 languages, ils sont conçus pour un paradigme spécifique (fonctionnel vs objet), et faire l'un avec l'autre est contre-productif.

  25. #24
    12Pierre44

    Re : Concaténation de la chaine de caractères

    Juste une petite réponse polie à galérien : qu'est-ce qui interdit d'utiliser malloc en C++ ?
    L'opérateur new cache un malloc.
    Tes propos sont déplacés et hors-sujet.
    Si tu veux aider notre ami demandeur, tu le fais.

  26. #25
    Olympe02

    Re : Concaténation de la chaine de caractères

    alors là je n'ai pas lu la conversation qu'est ce qui s'est passé à mon absence
    Sinon j'ai trouvé comment il faut faire c'est

    string phrase;
    phrase = "Le code postal de " + nom + "est" + std::to_string(cp);
    Il faut convertir le int en string tout simplement que ce n'est pas une chaîne de caractère il suffit de faire std::to_string(cp)

Discussions similaires

  1. C18 et chaine de caracteres.
    Par punky591 dans le forum Électronique
    Réponses: 11
    Dernier message: 08/10/2015, 12h03
  2. chaîne de caractères
    Par invite11df21b5 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 30/01/2013, 19h36
  3. concaténation de chaînes de caractères, langage C
    Par aureo91 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 14/12/2012, 06h37
  4. Chaine de caractères en C
    Par invite953f8104 dans le forum Électronique
    Réponses: 8
    Dernier message: 03/03/2009, 20h28
  5. PIC : Chaine de caractères
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2006, 17h49