Retrait d'attaque et de fuite des espaces à partir d'une chaîne
Comment faire pour supprimer les espaces à partir d'un objet de type string en C++.
Par exemple, comment faire pour supprimer attaque et de fuite des espaces ci-dessous l'objet de type string.
//Original string: " This is a sample string "
//Desired string: "This is a sample string"
La classe string, autant que je sache, ne fournit pas de méthode de suppression d'attaque et de fuite des espaces.
Pour ajouter au problème, comment étendre cette mise en forme pour traiter des espaces entre les mots de la chaîne. Par exemple,
//Original string: " This is a sample string "
//Desired string: "This is a sample string"
À l'aide de la chaîne de méthodes mentionnées dans la solution, je pense, de faire ces opérations en deux étapes.
- Supprimer et espaces.
- Utilisation find_first_of, find_last_of, find_first_not_of, find_last_not_of et substr, à plusieurs reprises dans les limites de mot pour obtenir la mise en forme souhaitée.
Vous devez vous connecter pour publier un commentaire.
Ceci est appelé ajustement. Si vous pouvez utiliser Boost, je le recommande.
Sinon, utilisez
find_first_not_of
pour obtenir l'index du premier caractère non-blanc, puisfind_last_not_of
pour obtenir l'index à partir de la fin qui n'est pas un espace. Avec ces derniers, l'utilisationsubstr
pour obtenir la sous-chaîne avec pas environnant les espaces.En réponse à votre montage, je ne connais pas le terme, mais je suppose que quelque chose le long des lignes de "réduire", c'est ce que je l'ai appelé. 🙂 (Remarque, j'ai modifié le blanc-espace à un paramètre, pour la souplesse)
Résultat:
site_t
êtresize_t
? Et je pense que là où vous avez le commentaireno whitespace
signifie que la chaîne est tous les espaces ou vide.size_t
faute de frappe et de tout-en-un dans le modifier, mais je n'ai pas remarque que mon commentaire a été inversé, merci.return std::string();
au lieu dereturn "";
pour renvoyer une chaîne vide?Facile suppression des commissions de suivi et des espaces supplémentaires à partir d'un std::string dans une ligne
enlever seulement les espaces
ou
retrait seulement espaces
ou
retrait seulement des espaces supplémentaires
substr
ouerase
).Je suis actuellement en utilisant ces fonctions:
Stimuler la chaîne de garniture algorithme
Ici est de savoir comment vous pouvez le faire:
Et les fonctions de soutien sont mis en oeuvre comme:
Et une fois que vous avez toutes ces à la place, vous pouvez écrire ceci:
Essayer cette
Exemple pour la garniture avant et arrière espaces suivants jon-hanson suggestion pour utiliser boost (seulement supprime fin et dans l'attente des espaces):
Résultats dans
"t e s t"
Il est également
trim_left
résultats dans"t e s t "
trim_right
résultats dans" t e s t"
C'est ma solution pour le décapage de l'attaque et de fuite des espaces ...
Le résultat est "Plamen"
Dans le code ci-dessus, le isSpace() la fonction est une fonction booléenne qui indique si un caractère est un espace blanc, vous pouvez mettre en œuvre cette fonction à vos besoins, ou il suffit d'appeler le isspace() à partir de "ctype.h" si vous le souhaitez.
À l'aide de la bibliothèque standard a beaucoup d'avantages, mais il faut être conscient de certains cas spéciaux qui causent des exceptions. Par exemple, aucune des réponses vise le cas où une chaîne C++ a certains caractères Unicode. Dans ce cas, si vous utilisez la fonction isspace, une exception sera levée.
J'ai été en utilisant le code suivant pour couper les cordes et certaines autres opérations qui pourraient venir dans maniable. Les principaux avantages de ce code sont les suivantes: il est vraiment très rapide (plus rapide que n'importe quel code je n'ai jamais testé), il n'utilise que la bibliothèque standard, et il n'a jamais provoque une exception:
Exemple pour la coupe d'attaque et de fuite des espaces
OU
J'ai testé, cela fonctionne. Donc cette méthode processInput vais juste demander à l'utilisateur de taper quelque chose dans. il sera de retour une chaîne qui a pas d'espace supplémentaire à l'interne, ni des espaces au début ou à la fin. Espérons que cette aide. (d'ailleurs mis un tas de commentaires de rendre plus simple à comprendre).
vous pouvez voir comment le mettre en œuvre dans le main() en bas
Ce qui pourrait être le plus simple de tous.
Vous pouvez utiliser
string::find
etstring::rfind
à trouver les espaces des deux côtés, et de réduire la chaîne.Pourquoi compliquer?
Cela fonctionne même si le boost est à l'échec, pas de regex, pas de trucs bizarres, ni les bibliothèques.
Pour le leader et les espaces de fin, que diriez-vous:
Ou pour une phrase:
Pas
boost
, pas deregex
, juste lestring
de la bibliothèque. C'est aussi simple que cela.Ce sujet de la erase-remove idiome?
Désolé. J'ai vu trop tard que vous ne souhaitez pas supprimer tous espaces.
Ma Solution pour ce problème qui n'utilisent pas toute STL méthodes, mais seulement C++ string propres méthodes est le suivant:
J'ai utilisé cette méthode pour passer un LeetCode problème Inverser les Mots dans une Chaîne de caractères