SORU
19 EKİM 2008, Pazar


'std kesmek için en iyi yolu ne::string

Şu anda sağ trim tüm CYBH için aşağıdaki kodu kullanıyorum::programlarım dizeleri:

std::string s;
s.erase(s.find_last_not_of(" \n\r\t") 1);

Gayet iyi çalışıyor, ama başarısız olabilir uç durumlarda ise birkaç tane var acaba?

Elbette, cevaplar zarif alternatifler de sol kesim çözüm bekliyoruz.

CEVAP
20 EKİM 2008, PAZARTESİ


Süsleme ihtiyaçlarım için bu 3 birini kullanın eğilimindedir:

#include <algorithm> 
#include <functional> 
#include <cctype>
#include <locale>

// trim from start
static inline std::string <rim(std::string &s) {
        s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun<int, int>(std::isspace))));
        return s;
}

// trim from end
static inline std::string &rtrim(std::string &s) {
        s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun<int, int>(std::isspace))).base(), s.end());
        return s;
}

// trim from both ends
static inline std::string &trim(std::string &s) {
        return ltrim(rtrim(s));
}

Açıklayıcı ve çok iyi iş kendini onlar oldukça.

EDİT: btw, aslında yerel ayarlar destekleyen ikinci bir tanımı yoktur, çünkü std::isspace belirsizliği ortadan kaldırmak yardımcı olmak için orada std::ptr_fun var. Bu döküm aynı olabilirdi, ama bu daha iyi gibi eğilimindedir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Police

    Android Poli

    21 NİSAN 2010
  • iNCH

    iNCH

    20 Temmuz 2009
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009