C++ STL fichier en argument char * en string

Résolu
velderama Messages postés 203 Statut Membre -  
velderama Messages postés 203 Statut Membre -
Bonjour,
Comment transformé un fichier lue en parametre en un string?
J'aurai besoin d'utilisé : istream_iterator<string>(file) iterateur predefini de la stl mais qui ne connait pas de type char *

int main(int argc, char *argv[1])
{

// Ouverture du bon fichier
ifstream file;
file.open(argv[1],ios::in);


.....

for_each( istream_iterator<string>(file), istream_iterator<string>(),....)

Merci

4 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Le plus simple c'est d'utiliser un getline qui permet de lire le fichier ligne par ligne
    #include <fstream>
    #include <iostream>
    #include <string>
    
    int main(int argc,char **argv){
        // Contrôler le nombre d'arguments
        if(argc != 2){
            std::cerr << "usage: " << argv[0] << " filename" << std::endl;
            return 1;
        }
    
        // Ouvrir le fichier
        std::ifstream ifs(argv[1]);
        if(!ifs){
            std::cerr << "impossible d'ouvrir le fichier " << argv[1] << std::endl;
            return 2;
        }
    
        // Lire le fichier
        {
            std::string line;
            for(;std::getline(ifs,line);){
                std::cout << line << std::endl;
            }
        }
    
        // Fermer le fichier
        ifs.close();
        return 0;
    }
    

    Bonne chance
    4
  2. Mahmah Messages postés 497 Statut Membre 125
     
    Bonjour,

    Si on veut vraiment utiliser for_each on peut faire comme suit:

    #include <sstream>
    #include <string>
    #include <iostream>
    #include <fstream>
    #include <algorithm>
    
    void afficher( char &c )
    {
    	// c est passé par référence, on pourrait le modifier.
    	std::cout << c;
    }
    
    int main( int argc, char *argv[])
    {
    	/*
    	Vérification de l'argument...
    	*/
    
    	std::ifstream	f;
    
    	f.open( argv[1] );
    
    	if ( f.is_open() )
    	{
    		std::stringstream	sstream;
    		std::string	s;
    
    		// lecture du fichier
    		sstream << f.rdbuf();
    
    		// fermeture du fichier
    		f.close();
    		
    		// Récupérer la lecture dans une string
    		s = sstream.str();
    
    		// traîtement par boucle
    		std::for_each( s.begin(), s.end(), aff );
    
    		getchar();
    		return 0;
    	}
    	else
    		return 1;
    }
    
    


    Mais je dois avouer que j'ai codé le truc juste par curiosité, je préfère la solution de MamieMando.
    Quoi ? On a plus le droit de lancer des fleurs maintenant ? ;-)

    M.
    1
  3. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 943
     
    Si si tu as le droit ^^
    0
  4. velderama Messages postés 203 Statut Membre 10
     
    Merci a tous les 2!
    0