Rechercher : dans
Par :

C++ STL fichier en argument char * en string

Dernière réponse le 10 mar 2008 à 09:58:18 velderama, le 8 mar 2008 à 15:29:20 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « c++ STL fichier en argument char * en string » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Langage C - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

mamiemando, le 8 mar 2008 à 16:27:21
  • +2

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

Répondre à mamiemando

2

Mahmah, le 8 mar 2008 à 17:27:59
  • +1

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.

Répondre à Mahmah

3

mamiemando, le 9 mar 2008 à 14:37:57

Si si tu as le droit ^^

Répondre à mamiemando

4

 velderama, le 10 mar 2008 à 09:58:18

Merci a tous les 2!

Répondre à velderama
Collection CommentÇaMarche.net