C++ scinde une chaîne
Je suis en train de découper une chaîne à l'aide des espaces comme un délimiteur. Je voudrais stocker chaque jeton dans une matrice ou un vecteur.
J'ai essayé.
string tempInput;
cin >> tempInput;
string input[5];
stringstream ss(tempInput); //Insert the string into a stream
int i=0;
while (ss >> tempInput){
input[i] = tempInput;
i++;
}
Le problème est que si je input "ceci est un test", le tableau ne semble pour stocker les entrées[0] = "ce". Il ne contient pas de valeurs d'entrée[2] par l'intermédiaire de l'entrée[4].
J'ai aussi essayé en utilisant un vecteur, mais avec le même résultat.
probablement en double stackoverflow.com/questions/236129/c-how-to-split-a-string
pas vraiment dupe. C'est "Où j'ai fait une erreur" vs "Quelle est la meilleure façon de..."?
Alors que la question est exactement la même: comment scinder une chaîne, je crois que la question posée par @pmr traite avec le générique de l'émission, alors que, dans cette question, le problème n'est pas dans le réel de fractionnement
Oui, vous avez raison. Malheureusement, la plupart des réponses ne traitent pas la question de cette façon.
pas vraiment dupe. C'est "Où j'ai fait une erreur" vs "Quelle est la meilleure façon de..."?
Alors que la question est exactement la même: comment scinder une chaîne, je crois que la question posée par @pmr traite avec le générique de l'émission, alors que, dans cette question, le problème n'est pas dans le réel de fractionnement
Oui, vous avez raison. Malheureusement, la plupart des réponses ne traitent pas la question de cette façon.
OriginalL'auteur Mike | 2010-04-28
Vous devez vous connecter pour publier un commentaire.
Aller à la copie de questions pour apprendre à découper une chaîne en mots, mais votre méthode est vraiment bon. Le véritable problème réside dans la façon dont vous êtes la lecture de l'entrée avant essayer de le diviser:
Lorsque vous utilisez le
cin >> tempInput
, vous êtes seulement le premier mot de la saisie, et non pas l'ensemble du texte. Il y a deux façons de travailler votre moyen de sortir de cela, le plus simple est d'oublier lestringstream
et directement à l'itération sur entrée:Cette approche vous donnera tous les jetons dans l'entrée dans un seul vecteur. Si vous avez besoin de travailler avec chacun de ligne en face de la maison, alors vous devriez utiliser
getline
de la<string>
en-tête de la place de lacin >> tempInput
:OriginalL'auteur David Rodríguez - dribeas
Avis qu'il est beaucoup plus facile à utiliser
copy
:Quant à savoir pourquoi ton code ne fonctionne pas: vous êtes à la réutilisation
tempInput
. Ne pas le faire. En outre, vous êtes en première lecture, un seul mot decin
, pas l'ensemble de la chaîne. C'est pourquoi seul un seul mot est mis dans lastringstream
.OriginalL'auteur Konrad Rudolph
La façon la plus simple: Coup de pouce.Générateur de jetons
Vous pouvez paramétrer les séparateurs et les séquences d'échappement de prendre seulement les espaces, si vous le souhaitez, par défaut, il marquer sur les deux espaces et de la ponctuation.
désolé de l'entendre, mais bien de la chance. Boost est un – et très souvent la la plus appropriée de solution. Êtes-vous autorisé à utiliser la bibliothèque standard? Après tout, c'est un standard ouvert et sa mise en oeuvre sont généralement open source. Dans tous les cas, le blâme de votre entreprise, pas de coup de pouce ou de réponses utiles. 🙁
et l'alternative est de se faufiler parfaitement valide les réponses qui peuvent être utilisés dans d'autres environnements? Que faire si quelqu'un vous demande comment parser un XML en c++? Voudriez-vous la mise en place d'un analyseur XML? ou serait plutôt adressés à une bibliothèque qui est-il? Dans les cas simples, la question sera probablement obtenir pur c++ et la bibliothèque de solutions et de qui, je crois, ajoute de la valeur plutôt que de la prendre en voiture. (Note: je n'ai pas upvoted car je crois que le vrai problème rencontrés par @Mike n'est pas à la segmentation de la chaîne, mais plutôt de la façon dont il lit l'entrée)
bonne prise, j'ai suivi aveuglément le "split" problème et n'a pas remarqué le problème qu'il avait fait la lecture.
OriginalL'auteur Matthieu M.