#include <string>
#include <sstream>
#include <iostream>
using namespace std;
string hex(unsigned int c)
{
ostringstream stm ;
stm << '=' << hex << uppercase << c;
return stm.str() ;
}
string url_encode(const string& str)
{
static const string unreserved = "0123456789"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"-_.~" ;
string result;
for (int i = 0; i < str.size(); i++) {
unsigned char c = str[i];
if (unreserved.find(c) != string::npos) {
result += c;
cout << c << endl;
} else {
result += hex(c);
cout << hex(c) << endl;
}
}
return result;
}
int main()
{
string test = "čau";
string result = url_encode(test);
//cout << test << '\n' << result << '\n';
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJpbmcgaGV4KHVuc2lnbmVkIGludCBjKQp7CiAgICBvc3RyaW5nc3RyZWFtIHN0bSA7CiAgICBzdG0gPDwgJz0nIDw8IGhleCA8PCB1cHBlcmNhc2UgPDwgYzsKICAgIHJldHVybiBzdG0uc3RyKCkgOwp9CgpzdHJpbmcgdXJsX2VuY29kZShjb25zdCBzdHJpbmcmIHN0cikKewogICAgc3RhdGljIGNvbnN0IHN0cmluZyB1bnJlc2VydmVkID0gIjAxMjM0NTY3ODkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLV8ufiIgOwogICAgc3RyaW5nIHJlc3VsdDsKCglmb3IgKGludCBpID0gMDsgaSA8IHN0ci5zaXplKCk7IGkrKykgewoJCXVuc2lnbmVkIGNoYXIgYyA9IHN0cltpXTsKCQkKCQlpZiAodW5yZXNlcnZlZC5maW5kKGMpICE9IHN0cmluZzo6bnBvcykgewoJCQlyZXN1bHQgKz0gYzsKCQkJY291dCA8PCBjIDw8IGVuZGw7CgkJfSBlbHNlIHsKCQkJcmVzdWx0ICs9IGhleChjKTsKCQkJY291dCA8PCBoZXgoYykgPDwgZW5kbDsKCQl9Cgl9CiAgICByZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpCnsKICAgIHN0cmluZyB0ZXN0ID0gIsSNYXUiOwogICAgc3RyaW5nIHJlc3VsdCA9IHVybF9lbmNvZGUodGVzdCk7CiAgICAvL2NvdXQgPDwgdGVzdCA8PCAnXG4nIDw8IHJlc3VsdCA8PCAnXG4nOwp9Cg==