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

  • Grace Su

    Grace Su

    6 Ocak 2006
  • mliskIT

    mliskIT

    29 Mart 2012
  • My Name Is Jeff

    My Name Is J

    26 ŞUBAT 2008