it-swarm-eu.dev

Entfernen Sie Leerzeichen aus std :: string in C ++

Was ist die bevorzugte Methode zum Entfernen von Leerzeichen aus einer Zeichenfolge in C++? Ich könnte alle Zeichen durchlaufen und eine neue Zeichenfolge erstellen, aber gibt es einen besseren Weg?

201
Steve Hanov

Verwenden Sie am besten den Algorithmus remove_if und isspace:

remove_if(str.begin(), str.end(), isspace);

Jetzt kann der Algorithmus selbst den Container nicht ändern (nur die Werte ändern), sodass er die Werte tatsächlich umstellt und einen Zeiger zurückgibt, an der Stelle, an der sich das Ende jetzt befinden sollte. Also müssen wir string :: erase aufrufen, um die Länge des Containers tatsächlich zu ändern:

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

Wir sollten auch beachten, dass remove_if höchstens eine Kopie der Daten erstellt. Hier ist eine Beispielimplementierung:

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

Von gamedev

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

Kann man Boost String Algo benutzen? http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/usage.html#id129057

erase_all(str, " "); 
30

Verwenden Sie zum Trimmen Boost-String-Algorithmen :

#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

// ...

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

Sie können diese Lösung zum Entfernen eines Zeichens verwenden:

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

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

Hi, so etwas kannst du machen. Diese Funktion löscht alle Leerzeichen.

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

Ich habe eine andere Funktion gemacht, die alle unnötigen Leerzeichen löscht.

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);
}

benutze es:

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

Wenn Sie dies mit einem einfachen Makro tun möchten, ist hier eines:

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

Dies setzt voraus, dass Sie #include <string> natürlich.

Nenne es so:

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

Ich habe die folgende Arbeit lange genutzt - ich bin mir nicht sicher, wie komplex sie ist.

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

wenn Sie das Zeichen ' ' entfernen möchten und einige zum Beispiel - verwenden möchten

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

erhöhen Sie ebenfalls einfach den ||, wenn die Anzahl der zu entfernenden Zeichen nicht 1 ist

aber wie von anderen erwähnt, scheint die Löschsprache auch in Ordnung zu sein.

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;
}

Dieser Code nimmt im Grunde genommen eine Zeichenfolge und durchläuft jedes Zeichen darin. Anschließend wird geprüft, ob es sich bei dieser Zeichenfolge um ein Leerzeichen handelt. Ist dies nicht der Fall, wird das Zeichen einer neuen Zeichenfolge hinzugefügt.

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