#include <iostream>
#include <string>
#include <algorithm>
#include <assert.h>
struct SameCharacter {
SameCharacter(char character) : character(character) {}
bool operator()(char c) { return c == character; }
const char character;
};
void RemoveCharacterFromString(char character_for_remove, std::string &string) {
std::string::iterator it = std::remove_if(
string.begin(), string.end(), SameCharacter(character_for_remove));
string.erase(it, string.end());
}
void RemoveAllCharactersInRangeFromString(char from, char to,
std::string &string) {
assert(from <= to);
for (char curr_character = from; curr_character <= to; ++curr_character) {
RemoveCharacterFromString(curr_character, string);
}
}
char *StringToCharArray(const std::string &str, char *s) {
std::copy(str.begin(), str.end(), s);
s[str.size()] = '\0';
return s;
}
char *Del_Useless(char *s) {
std::string string(s);
RemoveAllCharactersInRangeFromString('j', 'z', string);
RemoveAllCharactersInRangeFromString('J', 'Z', string);
return StringToCharArray(string, s);
}
int main() {
char raw_str[100] = "aaa bbb ccc ddd ccc fff eee ggg fff jj asdf z asdf";
std::cout << "Raw string : " << raw_str << '\n';
char *cleaned_string = Del_Useless(raw_str);
std::cout << "after remove: " << cleaned_string << '\n';
std::cout << "Raw string : " << raw_str << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgpzdHJ1Y3QgU2FtZUNoYXJhY3RlciB7CiAgU2FtZUNoYXJhY3RlcihjaGFyIGNoYXJhY3RlcikgOiBjaGFyYWN0ZXIoY2hhcmFjdGVyKSB7fQogIGJvb2wgb3BlcmF0b3IoKShjaGFyIGMpIHsgcmV0dXJuIGMgPT0gY2hhcmFjdGVyOyB9CgogIGNvbnN0IGNoYXIgY2hhcmFjdGVyOwp9OwoKdm9pZCBSZW1vdmVDaGFyYWN0ZXJGcm9tU3RyaW5nKGNoYXIgY2hhcmFjdGVyX2Zvcl9yZW1vdmUsIHN0ZDo6c3RyaW5nICZzdHJpbmcpIHsKICBzdGQ6OnN0cmluZzo6aXRlcmF0b3IgaXQgPSBzdGQ6OnJlbW92ZV9pZigKICAgICAgc3RyaW5nLmJlZ2luKCksIHN0cmluZy5lbmQoKSwgU2FtZUNoYXJhY3RlcihjaGFyYWN0ZXJfZm9yX3JlbW92ZSkpOwogIHN0cmluZy5lcmFzZShpdCwgc3RyaW5nLmVuZCgpKTsKfQoKdm9pZCBSZW1vdmVBbGxDaGFyYWN0ZXJzSW5SYW5nZUZyb21TdHJpbmcoY2hhciBmcm9tLCBjaGFyIHRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyAmc3RyaW5nKSB7CiAgYXNzZXJ0KGZyb20gPD0gdG8pOwogIGZvciAoY2hhciBjdXJyX2NoYXJhY3RlciA9IGZyb207IGN1cnJfY2hhcmFjdGVyIDw9IHRvOyArK2N1cnJfY2hhcmFjdGVyKSB7CiAgICBSZW1vdmVDaGFyYWN0ZXJGcm9tU3RyaW5nKGN1cnJfY2hhcmFjdGVyLCBzdHJpbmcpOwogIH0KfQoKY2hhciAqU3RyaW5nVG9DaGFyQXJyYXkoY29uc3Qgc3RkOjpzdHJpbmcgJnN0ciwgY2hhciAqcykgewogIHN0ZDo6Y29weShzdHIuYmVnaW4oKSwgc3RyLmVuZCgpLCBzKTsKICBzW3N0ci5zaXplKCldID0gJ1wwJzsKICByZXR1cm4gczsKfQoKY2hhciAqRGVsX1VzZWxlc3MoY2hhciAqcykgewogIHN0ZDo6c3RyaW5nIHN0cmluZyhzKTsKICBSZW1vdmVBbGxDaGFyYWN0ZXJzSW5SYW5nZUZyb21TdHJpbmcoJ2onLCAneicsIHN0cmluZyk7CiAgUmVtb3ZlQWxsQ2hhcmFjdGVyc0luUmFuZ2VGcm9tU3RyaW5nKCdKJywgJ1onLCBzdHJpbmcpOwogIHJldHVybiBTdHJpbmdUb0NoYXJBcnJheShzdHJpbmcsIHMpOwp9CgppbnQgbWFpbigpIHsKICBjaGFyIHJhd19zdHJbMTAwXSA9ICJhYWEgYmJiIGNjYyBkZGQgY2NjIGZmZiBlZWUgZ2dnIGZmZiBqaiBhc2RmICB6IGFzZGYiOwogIHN0ZDo6Y291dCA8PCAiUmF3IHN0cmluZyAgOiAiIDw8IHJhd19zdHIgPDwgJ1xuJzsKICBjaGFyICpjbGVhbmVkX3N0cmluZyA9IERlbF9Vc2VsZXNzKHJhd19zdHIpOwogIHN0ZDo6Y291dCA8PCAiYWZ0ZXIgcmVtb3ZlOiAiIDw8IGNsZWFuZWRfc3RyaW5nIDw8ICdcbic7CiAgc3RkOjpjb3V0IDw8ICJSYXcgc3RyaW5nIDogICIgPDwgcmF3X3N0ciA8PCAnXG4nOwp9