7
votes

C ++: Pourquoi l'espace termine-t-il toujours une chaîne lors de la lecture?

Utilisation de type std :: String Code> Pour accepter une phrase, pour la pratique (je n'ai pas travaillé avec des chaînes en C ++) Je vérifie si un personnage est une voyelle ou non. J'ai eu ceci:

std::string analyse = "";
std::cin >> analyse;


3 commentaires

Ce n'est pas STD :: String, qui peut contenir n'importe quel caractère, y compris les espaces et les nulls. Montrez comment vous lisez dans la chaîne.


Comment définissez-vous analyser ? Qu'est-ce que vous obtenez si vous COUT << Analyse.Length () ? La chaîne "Aecio" compte-t-elle correctement? Peut-être que le problème est dans le ... partie du bloc d'enseil?


Sur un côté .. Stockez la longueur dans une variable (const int CI = analyses.length ();) Les fonctions dans la mauvaise pratique sont une mauvaise pratique.


4 Réponses :


4
votes

Je ne peux pas dire au code que vous avez collé, mais je vais sortir sur un membre et deviner que vous lisez dans la chaîne à l'aide de l'opérateur d'extraction de flux (Stream >> String). < P> L'opérateur d'extraction de flux s'arrête quand il rencontre des espaces blanche.

Si ce n'est pas ce qui se passe, pouvez-vous nous montrer comment vous remplissez votre chaîne et quels sont ses contenus?

Si j'ai raison, vous allez vouloir une méthode différente de lecture du contenu dans la chaîne. std :: getline () est probablement la méthode la plus simple de lecture d'un fichier. Il s'arrête chez les nouvelles lignes au lieu de chez WhitSpace.


Edition basée sur la question modifiée: Utilisez ceci (DoubleCheck la syntaxe. Je ne suis pas devant mon compilateur.): xxx

Ceci devrait arrêter de lire lorsque vous appuyez sur "Entrée".


0 commentaires

2
votes

Si vous souhaitez lire une ligne entière (y compris les blancs), vous devriez lire à l'aide de GetLine. Schématiquement, il ressemble à ceci:

string s;
getline( cin, s );
cout << "You entered " << s << endl;


1 commentaires

GetLine fonctionne bien. Heureux que ce n'était pas un problème aléatoire, aide-moi à apprendre.



9
votes

Je suppose que vous lisez votre chaîne avec quelque chose comme votre_stream >> votre_string; . Opérateur >> pour les chaînes est défini pour fonctionner (environ) identique à celui de scanf 'S % s conversion, qui lit jusqu'à ce qu'il rencontre des espaces - Par conséquent, opérateur >> fait la même chose.

Vous pouvez lire une ligne d'entrée entière à la place avec std :: getline . Vous voudrez peut-être aussi regarder un Réponse J'ai posté dans une question précédente (fournit des alternatives à std :: getline ).


1 commentaires

Merci pour le lien de réponse, +1



1
votes

Le >> Opérateur sur un Istream sépare des chaînes sur WhitSpace. Si vous souhaitez obtenir une ligne entière, vous pouvez utiliser readline (CIN, Destination_string) .


2 commentaires

Peut-être que vous avez l'intention getline plutôt que readline ? Bien qu'il y ait des bibliothèques qui incluent des fonctions nommées readline , ce n'est pas une partie de la bibliothèque standard.


Oui, j'ai l'intention de getline. (Et c'est d'autres langues qui utilisent readline, c'est pourquoi je suis confus.)