std::ctype_base::space est le délimiteur pour std::istream qui le fait s'arrêter de lire la suite de caractères à partir de la source.
std::ctype_base::space désigne les espaces et les retour à la ligne. Cela signifie que, s peut contenir n'importe quel caractère sauf les espaces et les retour à la ligne, lors de la lecture à l'aide de cin>>s.
Si vous voulez lire une ligne complète contenant des espaces, vous pouvez utiliser getline() fonction qui utilise de retour à la ligne comme séparateur. Il existe également sa fonction surchargée, que vous pouvez utiliser si vous voulez fournir votre propre délimiteur. Voir la documentation pour plus de détails.
Vous pouvez également utiliser personnalisés locale que vous pouvez configurer pour std::istream. Votre personnalisation des paramètres régionaux pouvez définir un ensemble de caractères à être traités comme délimiteur par std::istream. Vous pouvez voir un exemple ici (voir ma solution):
Je crois que je vois ce que vous essayez de dire, mais std::ctype_base::space est un enum, et est une valeur de masque, qui peut vraiment être utilisé comme un argument pour std::ctype<>::is. Qui à son tour dépend de la imprégnée locale, qui peut en principe faire quoi que ce soit. Hmm.. je comprends. Ma version modifiée (après la ligne horizontale) explique sans doute que mieux? :-/ Oui, bien que je considère que la solution que vous faites référence à des abus. Les choses importantes à retenir sont: 1) l'espace blanc est le séparateur, et 2) ce qui est considéré comme le blanc de l'espace des paramètres régionaux dépendant, sur la locale imprégnée dans le ruisseau.
Le délimiteur est un caractère ch pour qui std::isspace( ch,
std::sin.getlocale() ) renvoie la valeur true. En d'autres termes, quelle que soit
le imprégnée locale estime qu'un "espace blanc". (Bien que j'
considérons un peu de l'abus, j'ai connu des programmeurs de créer
contextes particuliers, qui considèrent par exemple , espace blanc, et l'utilisation >> de lire une liste séparée par des virgules.)
Je crois que j'ai abusé ici (est-ce vraiment de l'abus?) : stackoverflow.com/questions/5607589/... Je pense qu'il est. L'appel d'une virgule, espace blanc est à mon humble avis d'abus, et de la confusion. Il est également dangereux: la imprégnée locale est utilisée pour d'autres choses, comme l'analyse des chiffres. (Imaginez les conséquences si vous utilisez des paramètres régionaux français, où ',' est également le séparateur décimal.) Je préfère généralement un manipulateur pour cela. Le séparateur doit être locale dépendante. (Où la virgule est la virgule, le point-virgule est généralement utilisé en tant que séparateur.) Mais nous avons vraiment besoin d'une entrée séparée pour elle. (C'est un problème avec std::complex, dont << opérateur est inutilisable.) Comment imprégné locale est utilisée pour analyser des nombres? Pourriez-vous expliquer cela? Les numéros sont analysées à l'aide de la num_get facette de la imprégnée de paramètres régionaux. Je n'ai pas l'obtenir. Permettez-moi de reformuler ma question: si je devais lire uniquement des nombres à partir d'un fichier texte, comment dois-je procéder?
std::ctype_base::space
est le délimiteur pourstd::istream
qui le fait s'arrêter de lire la suite de caractères à partir de la source.std::ctype_base::space
désigne les espaces et les retour à la ligne. Cela signifie que,s
peut contenir n'importe quel caractère sauf les espaces et les retour à la ligne, lors de la lecture à l'aide decin>>s
.Si vous voulez lire une ligne complète contenant des espaces, vous pouvez utiliser
getline()
fonction qui utilise de retour à la ligne comme séparateur. Il existe également sa fonction surchargée, que vous pouvez utiliser si vous voulez fournir votre propre délimiteur. Voir la documentation pour plus de détails.Vous pouvez également utiliser personnalisés locale que vous pouvez configurer pour
std::istream
. Votre personnalisation des paramètres régionaux pouvez définir un ensemble de caractères à être traités comme délimiteur parstd::istream
. Vous pouvez voir un exemple ici (voir ma solution):Bonne manière de diviser un std::string dans un vector<string>
std::ctype_base::space
est unenum
, et est une valeur de masque, qui peut vraiment être utilisé comme un argument pourstd::ctype<>::is
. Qui à son tour dépend de la imprégnée locale, qui peut en principe faire quoi que ce soit.Hmm.. je comprends. Ma version modifiée (après la ligne horizontale) explique sans doute que mieux? :-/
Oui, bien que je considère que la solution que vous faites référence à des abus. Les choses importantes à retenir sont: 1) l'espace blanc est le séparateur, et 2) ce qui est considéré comme le blanc de l'espace des paramètres régionaux dépendant, sur la locale imprégnée dans le ruisseau.
OriginalL'auteur Nawaz
Le délimiteur est un caractère
ch
pour quistd::isspace( ch,
renvoie la valeur true. En d'autres termes, quelle que soitstd::sin.getlocale() )
le imprégnée locale estime qu'un "espace blanc". (Bien que j'
considérons un peu de l'abus, j'ai connu des programmeurs de créer
contextes particuliers, qui considèrent par exemple
,
espace blanc, et l'utilisation>>
de lire une liste séparée par des virgules.)Je pense qu'il est. L'appel d'une virgule, espace blanc est à mon humble avis d'abus, et de la confusion. Il est également dangereux: la imprégnée locale est utilisée pour d'autres choses, comme l'analyse des chiffres. (Imaginez les conséquences si vous utilisez des paramètres régionaux français, où
','
est également le séparateur décimal.) Je préfère généralement un manipulateur pour cela. Le séparateur doit être locale dépendante. (Où la virgule est la virgule, le point-virgule est généralement utilisé en tant que séparateur.) Mais nous avons vraiment besoin d'une entrée séparée pour elle. (C'est un problème avecstd::complex
, dont<<
opérateur est inutilisable.)Comment imprégné locale est utilisée pour analyser des nombres? Pourriez-vous expliquer cela?
Les numéros sont analysées à l'aide de la
num_get
facette de la imprégnée de paramètres régionaux.Je n'ai pas l'obtenir. Permettez-moi de reformuler ma question: si je devais lire uniquement des nombres à partir d'un fichier texte, comment dois-je procéder?
OriginalL'auteur James Kanze