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

  • cekehechu

    cekehechu

    20 HAZİRAN 2006
  • Excel Functions

    Excel Functi

    4 NİSAN 2010
  • PC Learning Zone - Computer Training

    PC Learning

    8 EYLÜL 2006