Partage
  • Partager sur Facebook
  • Partager sur Twitter

string et concaténation

débutant

Sujet résolu
    20 juin 2008 à 17:55:42

    Bonjour à tous,

    Je voulais faire un essai avec l'objet string. Je prend la chaine "gaston" et je veux recréer une chaine en ajoutant un * entre chaque lettre.

    Mais la deuxième chaine ne donne rien ...

    Si vous pouviez éclairer ma lanterne, ce serait sympa.
    Merçi d'avance et à+
    C_dur

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    // prototype
    void ajout(string chaine, char car) ;
    
    int main()
    {
        string ch = "gaston";
        char c = '*' ;
    
        ajout(ch, c) ;
    
        return 0;
    }
    
    void ajout(string chaine, char car)
    {
    	string ch2 = "" ;
    
    	for (int i = 0; i < chaine.length(); ++i)
    	{
    		ch2[i] = ch2[i] + chaine[i] + car ;
    	}
    
    	cout <<  "chaine: " << chaine << endl
    		 <<	"chaine 2: "<< ch2 << endl ;
    
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2008 à 18:00:02

      Bonjour,

      Ce qu'il y a justement de bien avec les string, entre autre, c'est que l'opérateur + est surchargé pour permettre la concaténation. Tu peux sommer directement deux string.
      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2008 à 19:22:58

        bonjour,

        ben oui, mais cela ne fonctionne pas dans mon exemple de code... je passe surement à coté de quelque chose mais je ne vois pas quoi o_O
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          20 juin 2008 à 19:27:23

          ligne 25 : addition de char != ajouter. Surtout que ch2[i] n'est rien.

          std::string::insert,
          ou tu prends une chaine temporaire, tu ajoutes en deux temps :
          > 1. chaine[i]
          > 2. car.
          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2008 à 19:30:05

            à la ligne 25 tu fais :

            ch2[i] = ch2[i] + chaine[i] + car ;
            


            Or ce que tu aimerais faire, c'est prendre la chaine ch2, lui ajouter une lettre et une étoile. Toi ce que tu fais, tu modifies le i-ème caractère de ch2 (qui n'existe pas en plus).

            Il faut que tu fasses "phrase = phrase + lettre + *", ce qi donne:

            ch2 = ch2 + chaine[i] + car ;
            


            EDIT: grillé par hiura
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              20 juin 2008 à 19:49:12

              Merçi à vous tous,

              En effet, j'étais complètement aveuglé pour rater ça !

              Encore merçi pour votre patience,

              Maintenant, mon code fonctionne correctement:

              #include <iostream>
              #include <string>
              
              using namespace std;
              
              // prototype
              void ajout(string chaine, char car) ;
              
              int main()
              {
                  string ch = "gaston";
                  char c = '*' ;
              
                  ajout(ch, c) ;
              
                  return 0;
              }
              
              void ajout(string chaine, char car)
              {
              	string ch2 = "" ;
              
              	for (int i = 0; i < chaine.length(); ++i)
              	{
              		if (i == (chaine.length() - 1))
              			ch2 = ch2 + chaine[i] ;
              		else
              			ch2 = ch2 + chaine[i] + car ;
              	}
              
              	cout << "Chaine 1: " << chaine << endl
              		 << "chaine 2: " << ch2 << endl ;
              
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                20 juin 2008 à 19:58:59

                Et en vrai, on utilise "ch2 += chaine[i];"

                Voire, carrément mieux:
                - si ch2 existait déjà "ch2 += chaine; ch2 += car;"
                - sinon: "const std::string ch2 = chaine + car;"

                ... et si ton but c'est de rajouter une étoile entre chaque lettre:
                std::string parasite(string const& chaine, char car)
                {
                    std::string res ;
                    if (! chaine.empty() ) {
                        res . reserve(2 * chaine.length() - 1); // optimisation non nécessaire
                        res += chaine[0];
                        for (int i=1 ; i!=chaine.length() ; ++i) {
                            res += car ; res += chaine[i];
                        }
                    }
                    return res;
                }
                


                (resize() et affectation directe sont peut-être plus efficaces ... à tester)
                • Partager sur Facebook
                • Partager sur Twitter
                C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.

                string et concaténation

                × 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