4 Mart 2016 Cuma

String Algoritmaları

Giriş
Eğer kendi algoritmamızı yazıyorsak template şeklinde kodlamaya dikkat etmek gerekir. Parametremiz std::basic_string olmalı. Template olarak char, wchar kullanılabilir.

template<class T>
inline void myalgorithm(std::basic_string<T>& strInOut)
{...}
Trim
Trim string'in sağındaki ve solundaki boşlukları siler.
template<class TString>
static inline TString &trim_left(TString &s)
{
    s.erase(std::begin(s), std::find_if(std::begin(s), std::end(s),
                           std::not1(std::ptr_fun<int, int>(std::isspace))));
    return s;
}

template<class TString>
static inline TString &trim_right(TString &s)
{
    s.erase(std::find_if(s.rbegin(), s.rend(),
            std::not1(std::ptr_fun<int, int>(std::isspace))).base(), std::end(s));
    return s;
}

template<class TString>
static inline TString &trim(TString &s)
{
    return trim_left(trim_right(s));
}
Trim Right şöyle yazılabilir.
template<class T>
inline void removeOuterWhitespace(std::basic_string<T>& strInOut)
{
  constexpr auto delim[] = {T(' '),T('\t'),T('\n'),T(0)};
  const auto uiBegin = strInOut.find_first_not_of(delim);

  if (uiBegin == std::basic_string<T>::npos)
  {
    // the whole string is whitespace
    strInOut.clear();
    return;
  }

  const auto  uiEnd   = strInOut.find_last_not_of(delim);
  strInOut = strInOut.substr(uiBegin, uiEnd - uiBegin + 1);
}

Hiç yorum yok:

Yorum Gönder