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

  • Helder Barreto

    Helder Barre

    22 Mayıs 2006
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014