#include <iostream>
#include <cstring>
#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, char *string) {
char *end = string + strlen(string);
char *it = std::remove_if(string, end, SameCharacter(character_for_remove));
std::fill(it, end, '\0');
}
void RemoveAllCharactersInRangeFromString(char from, char to, char *string) {
assert(from <= to);
for (char curr_character = from; curr_character <= to; ++curr_character) {
RemoveCharacterFromString(curr_character, string);
}
}
char *Del_Useless(char *s) {
RemoveAllCharactersInRangeFromString('j', 'z', s);
RemoveAllCharactersInRangeFromString('J', 'Z', s);
return 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';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGFzc2VydC5oPgoKc3RydWN0IFNhbWVDaGFyYWN0ZXIgewogIFNhbWVDaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIpIDogY2hhcmFjdGVyKGNoYXJhY3Rlcikge30KICBib29sIG9wZXJhdG9yKCkoY2hhciBjKSB7IHJldHVybiBjID09IGNoYXJhY3RlcjsgfQoKICBjb25zdCBjaGFyIGNoYXJhY3RlcjsKfTsKCnZvaWQgUmVtb3ZlQ2hhcmFjdGVyRnJvbVN0cmluZyhjaGFyIGNoYXJhY3Rlcl9mb3JfcmVtb3ZlLCBjaGFyICpzdHJpbmcpIHsKICBjaGFyICplbmQgPSBzdHJpbmcgKyBzdHJsZW4oc3RyaW5nKTsKICBjaGFyICppdCA9IHN0ZDo6cmVtb3ZlX2lmKHN0cmluZywgZW5kLCBTYW1lQ2hhcmFjdGVyKGNoYXJhY3Rlcl9mb3JfcmVtb3ZlKSk7CiAgc3RkOjpmaWxsKGl0LCBlbmQsICdcMCcpOwp9Cgp2b2lkIFJlbW92ZUFsbENoYXJhY3RlcnNJblJhbmdlRnJvbVN0cmluZyhjaGFyIGZyb20sIGNoYXIgdG8sIGNoYXIgKnN0cmluZykgewogIGFzc2VydChmcm9tIDw9IHRvKTsKICBmb3IgKGNoYXIgY3Vycl9jaGFyYWN0ZXIgPSBmcm9tOyBjdXJyX2NoYXJhY3RlciA8PSB0bzsgKytjdXJyX2NoYXJhY3RlcikgewogICAgUmVtb3ZlQ2hhcmFjdGVyRnJvbVN0cmluZyhjdXJyX2NoYXJhY3Rlciwgc3RyaW5nKTsKICB9Cn0KCmNoYXIgKkRlbF9Vc2VsZXNzKGNoYXIgKnMpIHsKICBSZW1vdmVBbGxDaGFyYWN0ZXJzSW5SYW5nZUZyb21TdHJpbmcoJ2onLCAneicsIHMpOwogIFJlbW92ZUFsbENoYXJhY3RlcnNJblJhbmdlRnJvbVN0cmluZygnSicsICdaJywgcyk7CiAgcmV0dXJuIHM7Cn0KCmludCBtYWluKCkgewogIGNoYXIgcmF3X3N0clsxMDBdID0gImFhYSBiYmIgY2NjIGRkZCBjY2MgZmZmIGVlZSBnZ2cgZmZmIGpqIGFzZGYgIHogYXNkZiI7CiAgc3RkOjpjb3V0IDw8ICJSYXcgc3RyaW5nICA6ICIgPDwgcmF3X3N0ciA8PCAnXG4nOwogIGNoYXIgKmNsZWFuZWRfc3RyaW5nID0gRGVsX1VzZWxlc3MocmF3X3N0cik7CiAgc3RkOjpjb3V0IDw8ICJhZnRlciByZW1vdmU6ICIgPDwgY2xlYW5lZF9zdHJpbmcgPDwgJ1xuJzsKICBzdGQ6OmNvdXQgPDwgIlJhdyBzdHJpbmcgOiAgIiA8PCByYXdfc3RyIDw8ICdcbic7Cn0K