Groß- Kleinschreibung
-
google mal nach toupper und tolower
Gruß...
-
Und kann mir jemand sagen, wie ich eine Funktion schreiben soll, die ein Zeichen
löscht, wenn es ein zweites Mal vorkommt?
-
Korrektur zu meiner Lösung: Hat nichts mit 'int' zu tun sondern mit Überladung, und die Extra-Funktion ist unnötig, wenn man explizit castet:
transform(s.begin(), s.end(), s.begin(), static_cast<int (*)(int)>(toupper));D schrieb:
Und kann mir jemand sagen, wie ich eine Funktion schreiben soll, die ein Zeichen löscht, wenn es ein zweites Mal vorkommt?
Du meinst zweimal hintereinander? Oder überhaupt zweimal? Was soll bei „Hullu“ rauskommen? „Hulu“ oder „Hul“?
-
Hul
-
D schrieb:
Hul
Dann muss man wohl in einer Doppelschleife durchgehen.
std::string remove_doubles(std::string const& s) { std::string ret = ""; for (std::string::const_iterator i = s.begin(); i != s.end(); ++i) if (ret.find(*i, 0) == std::string::npos) ret += *i; return ret; }Mal schauen, ob's noch jemand eleganter hinbekommt (müsste gehen).
-
std::string bla(const std::string& str) { std::string ret(""); std::vector<bool> set(255,false); for (std::string::const_iterator i = str.begin(); i != str.end(); ++i) { if(!set[*i]){ ret+=*i; set[*i]=true; } } return ret; }
-
Danke!
-
struct char_set : std::unary_function<char,bool> { bool set[256]; char_set() : set() {} bool operator()(char x) const { return set[x] || !(set[x] = true); } }; std::string& remove_doubles(std::string& s) { s.erase( remove_if( s.begin(), s.end(), char_set() ), s.end() ); return s; } std::string remove_doubles_copy(std::string const& s) { std::string ret; remove_copy_if( s.begin(), s.end(), back_inserter( ret ), char_set() ); return ret; }
-
was spricht gegen std::unique? ^^
-
(D)Evil schrieb:
was spricht gegen std::unique? ^^
Das es nun hintereinander kommende Doppelpärchen entfernt
