Supprimer les espaces d'une chaîne en C ++
Je suis présentement en train d'apprendre le C++. Je suis en train de coder une méthode pour supprimer les espaces en blanc, forme une chaîne de caractères et le retour de la chaîne sans les espaces
C'est mon code:
string removeSpaces(string input)
{
int length = input.length();
for (int i = 0; i < length; i++) {
if(input[i] == ' ')
input.erase(i, 1);
}
return input
}
Mais cela a un bug comme il ne supprimera pas le double ou le triple des espaces blancs.
J'ai trouvé ceci sur le net
s.erase(remove(s.begin(),s.end(),' '),s.end());
mais apparemment c'est au retour d'une iterator
(si je comprends bien)
Est-il possible de convertir le iterator
de retour à ma chaîne input
?
Le plus important est ce la bonne solution?
source d'informationauteur mikey
Vous devez vous connecter pour publier un commentaire.
std::string::erase
retourne un itérateur, mais vous n'avez pas à l'utiliser. Votre chaîne d'origine est modifié.std::remove_if avec
erase
serait beaucoup plus facile (voir en direct):à l'aide de std::isspace avait l'avantage de saisir tous les types d'espace blanc.
Supposons votre entrée, un double de l'espace, par exemple "c++ [ ] [ ] [] plaisir" (
[ ]
représente un espace unique). Le premier espace a indice 3 (numérotation commence à partir de 0) et le deuxième espace, est bien sûr indice 4.Dans votre
for
boucle, quand vous frappezi == 3
de l'effacement du premier espace. La prochaine itération de la bouclei == 4
que l'index. Mais il est le deuxième de l'espace à l'indice 4 maintenant ? Non! La suppression du premier espace changé la chaîne en "c++ [ ] [] plaisir": l'espace pour enlever est à l'index 3, de nouveau!La solution pourrait être de supprimer les espaces à droite-à-gauche:
Cette solution a l'avantage d'être simple, mais comme Tony D points, il n'est pas efficace.
cela devrait aussi fonctionner --
std::replace( input.begin(), input.end(), ' ', '');
Vous devez inclure<algorithm>
ce code devrait fonctionner
Raison: si elle obtient de l'espace dans la chaîne, il permettra de réduire la longueur de la chaîne, de sorte que vous devez modifier la variable "longueur" en conséquence.
J'ai essayé d'écrire quelque chose.
Cette fonction prendre une corde et copie à une autre chaîne temporaire tout le contenu sans les espaces supplémentaires.
}