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 :

Interpr�tation \n dans un string en C++


Sujet :

C++

  1. #1
    Membre confirm�
    Inscrit en
    Juin 2007
    Messages
    161
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par d�faut Interpr�tation \n dans un string en C++
    bonjour � tous,

    Je veux �crire une chaine de caract�re avec un retour chariot dans un fichier.

    Par exemple mon string est :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    string str_Code = "do\n{\n	code\n}\nwhile (true);\n";
    le r�sultat que j'attends est :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    do
    {
    	code
    }
    while (true);
    Comment on peut interpr�ter ce caract�re sp�cial?
    Merci.

  2. #2
    Membre �m�rite

    Profil pro
    Inscrit en
    D�cembre 2008
    Messages
    533
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2008
    Messages : 533

  3. #3
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Alors, oui et non.

    std::endl va marcher, on est sur qu'il y aura un saut de ligne MAIS il va aussi d�charger le buffer, et donc si jamais c'est un code qui doit �tre tr�s performant �a deviens vite un frein.

    Donc, la plupart du temps oui std::endl suffira, mais attention � l'effet de perte de vitesse du au d�chargement du buffer.

    Que faire quand on ne veut pas utiliser std::endl?

    En fait ce n'est pas un probl�me de C++ mais bien de comment les logiciels de l'environnement vont lire les caract�res?

    Le probl�mes se situe dans la diff�rence entre windows qui par d�faut va n�cessiter des \n\r tandis que les OS unix-like vont n�cessiter des \n (ou l'inverse, je sais plus � vrai dire...).

    Donc, si tu �cris dans un editeur de texte, tu peux voir tes \n correctement. Si tu �cris dans la console, normalement \n est suffisant mais il se peut que sous certaines conditions \n\r soit n�cessaire.

    Bon ya pas de solution miracle alors faut juste �tre conscient du contexte.

  4. #4
    Membre confirm�
    Inscrit en
    Juin 2007
    Messages
    161
    D�tails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par d�faut
    En fait,
    Je dois �crire la chaine de caract�re dans un fichier

    Je re�oit dans le fichier la m�me chaine sans interpr�taion du \n ni du \n\r

    R�sultat re�u est : do\n{\n code\n}\nwhile (true);\n

    Comment faire?

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Normalement tu n'as rien a faire, sauf si ce que tu recois est :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    do\\n{\\n	code\\n}\\nwhile (true);\\n
    C'est � dire que les \ est un caract�re affich� mais tu ne le veux pas pas plus que n. Dans ce cas, il suffit de "remplacer" les "\\n" par des '\n'

    Utilise std::replace par exemple. Ce que tu dois comprendre c'est que '\n' est un caract�re seul, '\\' est le caract�re \ seul, non interprett�, "\\n" est une chaine de caract�re avec '\\' et 'n' comme caract�res.

    Une fois que tu as compris �a, il suffit de faire un remplacement.

  6. #6
    Membre exp�riment�

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Par d�faut
    Salut,

    Chez moi, ce code marche, (test� avec g++ 3.4 sous Red Hat 4).

    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
     
    #include <cstdlib>
    #include <fstream>
    #include <string>
     
    int main()
    {
    	std::string str_Code = "do\n{\n code\n}\nwhile (true);\n";
    	std::ofstream out ("test.txt", std::ios::out);
    	if (!out)
    	{
    		return EXIT_FAILURE;
    	}
     
    	out << str_Code;
     
    	return EXIT_SUCCESS;
    }

  7. #7
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    C'est ce que je disais, normalement ya rien a changer mais je suspecte que le probl�me viens d'un texte qui s'affiche dans la console comme dans le premier post mais du coup le contenu du string n'est pas exactement le m�me, comme je l'ai d�cris.

  8. #8
    Membre r�gulier
    Homme Profil pro
    �tudiant
    Inscrit en
    F�vrier 2012
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : F�vrier 2012
    Messages : 10
    Par d�faut
    tu ne peut pas �crire un string dans un fichier, il faut que tu convertis ton string en pointeur sur une cha�ne de caract�re avant d'�crire dans le fichier:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    	string str_Code= "do\n{\n code\n}\nwhile (true);";
    
    	const char szNomFichier[]="D:\\ton_fichier.txt";
    	FILE * f=fopen(szNomFichier,"w");
    
    	f=fopen(szNomFichier,"a");
    	fprintf(f,"%s", str_Code.c_str());
    	fclose(f);
    le c_str renvoi un pointeur sur cha�ne de caract�re.

  9. #9
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Tu peux tr�s bien �crire une cha�ne de caract�re dans un fichier, �tant donn� qu'on est sur le forum C++ on parlera de string dans un flux.

    Cf le code plus haut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    std::string str_Code = "do\n{\n code\n}\nwhile (true);\n";
    	std::ofstream out ("test.txt", std::ios::out);
    	if (!out)
    	{
    		return EXIT_FAILURE;
    	}
     
    	out << str_Code;
    la stl a surcharg� ces op�rateurs � cette fin.
    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
    R�dacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par d�faut
    Citation Envoy� par modafine Voir le message
    Comment on peut interpr�ter ce caract�re sp�cial?
    A ma connaissance, il n'existe rien de sp�cial. Il faut se pallucher le boulot � la main :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #include <fstream>
    #include <iostream>
    #include <string>
    #include <iterator>
    #include <algorithm>
     
    void generate()
    {
       std::ofstream of("fichier.txt");
       of<<"do\\n{\\n	code\\n}\\nwhile (true);\\n";
    }
     
    void read()
    {
       std::ifstream inf("fichier.txt");
       std::cout << "reading : \n\n";
       std::transform(
          std::istream_iterator<std::string>(inf)
          ,std::istream_iterator<std::string>()
          ,std::ostream_iterator<std::string> (std::cout, " ")
          ,[](std::string const&str_) -> std::string
          {
             std::string result = str_;
             const std::string searched = "\\n";
             size_t cur = result.find(searched);
             while(cur!=std::string::npos)
             {
                result.replace(cur,searched.size(),"\n");
                cur = result.find(searched);
             }
     
             return result;
          }
       );
    }
     
    int main()
    {
       generate();
     
       read();
     
       return 0;
    }
    @Le traitement du litt�ral '\n' en retour chariot rel�ve du compilo.

Discussions similaires

  1. code en java pour interpr�t� dans une String (#{} en ruby)
    Par quentigus dans le forum D�buter avec Java
    R�ponses: 2
    Dernier message: 04/06/2011, 19h34
  2. R�ponses: 4
    Dernier message: 18/05/2011, 14h11
  3. Interpr�tation balise JS dans cha�ne string
    Par Perceuse-Killer dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 29/06/2010, 14h35
  4. R�ponses: 10
    Dernier message: 07/04/2010, 21h14
  5. Centrer un texte dans un string Grid
    Par christine dans le forum C++Builder
    R�ponses: 5
    Dernier message: 22/10/2002, 22h33

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