Alors que la réponse de GMan est tout à fait correcte et raisonnable, il y a (au moins) une autre possibilité qui est Vaut la peine d'être considéré. Selon le genre de chose que vous faites, il peut être intéressant d'utiliser les itérateurs pour faire référence aux flux. Dans ce cas, votre translate
serait probablement std::transform
, avec un foncteur que vous écrivez pour gérer la traduction des caractères. Par exemple, si vous voulez traduire toutes les lettres dans un fichier en majuscules, et les écrire dans un autre fichier, vous pouvez faire quelque chose comme:
struct tr {
char operator()(char input) { return toupper((unsigned char)input); }
};
int main() {
std::ifstream input("file.txt");
input.skipws(false);
std::transform(std::ifstream_iterator<char>(input),
std::ifstream_iterator<char>(),
std::ostream_iterator<char>(std::cout, ""),
tr());
return 0;
}
Cela ne correspond pas tout à la question exactement comme vous demandé, mais cela peut être une technique utile de toute façon.
N'oubliez pas de faire le test après la lecture. Converti pour faire fonctionner correctement la boucle. –
Oups, merci, mauvaise habitude. Vous avez également ajouté la nouvelle ligne:] – GManNickG
Notez que les flux sont transmis par référence. Ils peuvent également être passés par pointeur, mais pas par valeur. –