Comment utiliser des délimiteurs autres que ceux par défaut lors de la lecture d'un fichier texte avec std :: fstream?
Dans mon code C++, je veux lire depuis un fichier texte (*.txt) et marquer chaque entrée. Plus précisément, je veux être capable de lire des mots à partir d'un fichier, telles que le "format", "pile", "Jason", "europe", etc.
J'ai choisi d'utiliser fstream
pour effectuer cette tâche, et je ne sais pas comment définir ça délimiteur de ceux que je veux utiliser (espace, \n
ainsi que les traits d'union et même des apostrophes comme dans "Mcdonal"). J'ai pensé l'espace et \n
sont les délimiteurs par défaut, mais des traits d'union ne sont pas, mais je veux les traiter comme des délimiteurs de sorte que lors de l'analyse du fichier, je vais trouver des mots dans "blah blah xxx animal-cat" simplement "bla", "blabla", "xxx", "animal", "chat".
Qui est, je veux être en mesure d'obtenir deux chaînes à partir de "stack overflow", "vous êtes", etc, et toujours être en mesure de maintenir \n
et de l'espace comme des séparateurs en même temps.
source d'informationauteur FrozenLand
Vous devez vous connecter pour publier un commentaire.
Un istream traite des "espaces blancs" comme des séparateurs. Il utilise les paramètres régionaux à dire les caractères d'espace blanc. Un jeu de paramètres régionaux, à son tour, comprend un ctype
facet
qui classifie les types de caractères. Une telle facette pourrait ressembler à quelque chose comme ceci:Et un petit programme de test pour montrer cela fonctionne:
Résultat:
istream_iterator<string>
utilise>>
de lire les différentes cordes à partir du flux, donc si vous l'utilisez directement à eux, vous devriez obtenir les mêmes résultats. Les pièces que vous devrez inclure la création de la locale à l'aide deimbue
pour rendre le flux de l'utilisation que locale.Vous pouvez utiliser
bien que cela ne prend en charge un seul séparateur. Pour découper les lignes sur vos différents délimiteurs, vous pouvez utiliser
qui prend plusieurs délimiteurs. Lorsque vous utilisez strtok vous avez seulement besoin de passer l'adresse de votre tampon la première fois - après cela, il suffit de passer dans une nulle et il vous donnera le prochain jeton à partir de la dernière, il vous a donné, en retournant un pointeur null quand il n'y a pas de plus.
EDIT: UNE mise en œuvre spécifique serait quelque chose comme