( mitch0 | 2019. 10. 03., cs - 10:07 )

Hali,

a #define használata nem túl szerencsés, és a cast sem túl szép, ahogy többen írták, célszerűbb egy megfelelő típusú konstanst használni, pl így:


std::string removewsp(std::string value) {
  constexpr char NBSP = 160;
  auto it = std::remove_if(value.begin(), value.end(), [](char c) {
    return std::isspace(c) || c == NBSP;
  });
  value.resize(it - value.begin());
  return value;
}

vagy így:


std::string removewsp2(const std::string& value) {
  constexpr char NBSP = 160;
  std::string res;
  res.reserve(value.size());
  std::copy_if(value.begin(), value.end(), std::back_inserter(res), [](char c) {
    return !(std::isspace(c) || c == NBSP);
  });
  return res;
}

Mindkét fenti példa lineáris futásidejű. Nekem a remove_if verzió kicsit szimpatikusabb, mert jobban kifejezi, hogy mit is akarunk csinálni, illetve könnyebben átalakítható olyan verzióra ami "helyben" szűri meg (alakítja át) a string-et.