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

  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Malwarebytes

    Malwarebytes

    22 Temmuz 2007
  • mobilenet.cz

    mobilenet.cz

    26 NİSAN 2008