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

  • Disney Pets and Animals

    Disney Pets

    29 ŞUBAT 2012
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • Tire Rack

    Tire Rack

    31 Mayıs 2007