web-dev-qa-db-fra.com

Supprimer les espaces de std :: string en C ++

Quel est le moyen préféré pour supprimer des espaces d'une chaîne en C++? Je pourrais parcourir tous les personnages et créer une nouvelle chaîne, mais existe-t-il un meilleur moyen?

201
Steve Hanov

La meilleure chose à faire est d'utiliser l'algorithme remove_if et isspace:

_remove_if(str.begin(), str.end(), isspace);
_

Maintenant, l'algorithme lui-même ne peut pas changer le conteneur (seulement modifier les valeurs), donc il mélange les valeurs et renvoie un pointeur sur l'endroit où devrait se trouver la fin. Nous devons donc appeler string :: erase pour modifier réellement la longueur du conteneur:

_str.erase(remove_if(str.begin(), str.end(), isspace), str.end());
_

Nous devrions également noter que remove_if fera au plus une copie des données. Voici un exemple d'implémentation:

_template<typename T, typename P>
T remove_if(T beg, T end, P pred)
{
    T dest = beg;
    for (T itr = beg;itr != end; ++itr)
        if (!pred(*itr))
            *(dest++) = *itr;
    return dest;
}
_
235
Matt Price
std::string::iterator end_pos = std::remove(str.begin(), str.end(), ' ');
str.erase(end_pos, str.end());
92
Arno

De gamedev

string.erase(std::remove_if(string.begin(), string.end(), std::isspace), string.end());
35
rupello

Pouvez-vous utiliser Boost String Algo? http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/usage.html#id129057

erase_all(str, " "); 
30
Nemanja Trifunovic

Pour le rognage, utilisez algorithmes de chaîne de renforcement :

#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

// ...

string str1(" hello world! ");
trim(str1);      // str1 == "hello world!"
14
Roman

Vous pouvez utiliser cette solution pour supprimer un caractère:

#include <algorithm>
#include <string>
using namespace std;

str.erase(remove(str.begin(), str.end(), char_to_remove), str.end());
12
user2281802

Salut, tu peux faire quelque chose comme ça. Cette fonction supprime tous les espaces.

string delSpaces(string &str) 
{
   str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
   return str;
}

J'ai créé une autre fonction, qui supprime tous les espaces inutiles.

string delUnnecessary(string &str)
{
    int size = str.length();
    for(int j = 0; j<=size; j++)
    {
        for(int i = 0; i <=j; i++)
        {
            if(str[i] == ' ' && str[i+1] == ' ')
            {
                str.erase(str.begin() + i);
            }
            else if(str[0]== ' ')
            {
                str.erase(str.begin());
            }
            else if(str[i] == '\0' && str[i-1]== ' ')
            {
                str.erase(str.end() - 1);
            }
        }
    }
    return str;
}
10
ddacot
string replaceinString(std::string str, std::string tofind, std::string toreplace)
{
        size_t position = 0;
        for ( position = str.find(tofind); position != std::string::npos; position = str.find(tofind,position) )
        {
                str.replace(position ,1, toreplace);
        }
        return(str);
}

utilise le:

string replace = replaceinString(thisstring, " ", "%20");
string replace2 = replaceinString(thisstring, " ", "-");
string replace3 = replaceinString(thisstring, " ", "+");
7
SudoBash

Si vous voulez faire cela avec une macro facile, en voici une:

#define REMOVE_SPACES(x) x.erase(std::remove(x.begin(), x.end(), ' '), x.end())

Cela suppose que vous ayez fait #include <string> bien sûr.

Appelez ça comme ça:

std::string sName = " Example Name ";
REMOVE_SPACES(sName);
printf("%s",sName.c_str()); // requires #include <stdio.h>
5
Volomike

J'ai utilisé le travail ci-dessous pendant longtemps - pas sûr de sa complexité.

s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return (f==' '||s==' ');}),s.end());

lorsque vous voulez supprimer le caractère ' ' et certains par exemple -, utilisez

s.erase(std::unique(s.begin(),s.end(),[](char s,char f){return ((f==' '||s==' ')||(f=='-'||s=='-'));}),s.end());

de même, il suffit d'augmenter le || si le nombre de caractères à supprimer n'est pas 1

mais comme mentionné par d'autres l'effacement supprimer idiome semble également bien.

2
Explorer_N
string removeSpaces(string Word) {
    string newWord;
    for (int i = 0; i < Word.length(); i++) {
        if (Word[i] != ' ') {
            newWord += Word[i];
        }
    }

    return newWord;
}

Ce code prend essentiellement une chaîne et effectue une itération sur tous ses caractères. Il vérifie ensuite si cette chaîne est un espace blanc. Si ce n'est pas le cas, le caractère est ajouté à une nouvelle chaîne.

1
Crisp Apples
string removespace(string str)
{    
    int m = str.length();
    int i=0;
    while(i<m)
    {
        while(str[i] == 32)
        str.erase(i,1);
        i++;
    }    
}
0
test c