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.