SORU
17 EYLÜL 2008, ÇARŞAMBA


Std boşluk::Kaldır C string

C bir dize boşluk kaldırmak için tercih edilen yolu nedir ? Tüm karakterleri döngü ve yeni bir dize inşa edebileceğini, ama orada daha iyi bir yolu var mı?

CEVAP
17 EYLÜL 2008, ÇARŞAMBA


Yapılacak en iyi şey algoritması remove_if ve isspace: kullanmaktır

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

Şimdi algoritma konteyner(sadece değerleri değiştirin) değişimin kendisi değil, aslında değerlerini ve şimdi olması gereken yerde bir işaretçi karıştırır etrafında döner. Dize aramak zorundayız::aslında konteyner uzunluğunu değiştirmek için silme:

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

Ayrıca remove_if verilerin bir kopyasını en fazla yapacak dikkat etmelisiniz. Burada ö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;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ehowhome

    ehowhome

    22 NİSAN 2009
  • Erica Griffin

    Erica Griffi

    8 HAZİRAN 2009
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013