it-swarm-tr.com

C ++ 'ta std :: string'den boşlukları kaldır

C++ 'da bir dizgiden boşlukları kaldırmak için tercih edilen yol nedir? Tüm karakterlerin arasında dolaşıp yeni bir dize oluşturabilirdim, ama daha iyi bir yolu var mı?

201
Steve Hanov

Yapılacak en iyi şey algoritmayı kullanmak remove_if ve isspace:

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

Şimdi algoritmanın kendisi kabı değiştiremez (yalnızca değerleri değiştirir), bu yüzden aslında değerleri karıştırır ve sonun olması gerektiği yere bir gösterici ile döner. Bu yüzden kabın uzunluğunu değiştirmek için string :: erase komutunu çağırmamız gerekiyor:

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

Ayrıca remove_if'in verilerin en fazla bir kopyasını alacağını da not etmeliyiz. İşte örnek bir uygulama:

_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

Gönderen gamedev

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

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

erase_all(str, " "); 
30

Kırpma için, dizgi algoritmalarını güçlendirin :

#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

// ...

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

Bir karakteri çıkarmak için bu çözümü kullanabilirsiniz:

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

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

Merhaba, böyle bir şey yapabilirsin. Bu fonksiyon tüm boşlukları siler.

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

Gereksiz alanları silen başka bir işlev yaptım.

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

kullan:

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

Bunu kolay bir makroyla yapmak istiyorsanız, işte bir tane:

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

Bu, elbette #include <string> yaptığınızı varsayar.

Öyle diyoruz:

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

Aşağıdaki çalışmayı uzun süre kullandım - karmaşıklığı konusunda emin değilim.

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

_' '_ karakterini ve bazılarını kaldırmak istediğinizde örneğin _-_ kullanın

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

aynı şekilde sadece _||_ arttırın. Eğer kaldırmak istediğiniz karakter sayısı 1 değilse

ancak diğerleri tarafından belirtildiği gibi, silme deyimini kaldır da iyi görünüyor.

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

Bu kod temelde bir dizge alır ve içindeki her karakter boyunca yinelenir. Daha sonra bu dizginin beyaz boşluk olup olmadığını kontrol eder, değilse, karakter yeni bir dizgeye eklenir.

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