#include <iostream>
#include <string>
std:: string query_encode( const std:: string & s)
{
std:: string ret;
#define IS_BETWEEN(ch, low, high) (ch >= low && ch <= high)
#define IS_ALPHA(ch) (IS_BETWEEN(ch, 'A', 'Z') || IS_BETWEEN(ch, 'a', 'z'))
#define IS_DIGIT(ch) IS_BETWEEN(ch, '0', '9')
#define IS_HEXDIG(ch) (IS_DIGIT(ch) || IS_BETWEEN(ch, 'A', 'F') || IS_BETWEEN(ch, 'a', 'f'))
for ( size_t i = 0 ; i < s.size ( ) ; )
{
char ch = s[ i++ ] ;
if ( IS_ALPHA( ch) || IS_DIGIT( ch) )
{
ret + = ch;
}
else if ( ( ch == '%' ) && IS_HEXDIG( s[ i+ 0 ] ) && IS_HEXDIG( s[ i+ 1 ] ) )
{
ret + = s.substr ( i- 1 , 3 ) ;
i + = 2 ;
}
else
{
switch ( ch)
{
case '-' :
case '.' :
case '_' :
case '~' :
case '!' :
case '$' :
case '&' :
case '\' ' :
case '(' :
case ')' :
case '*' :
case '+' :
case ',' :
case ';' :
case '=' :
case ':' :
case '@' :
case '/' :
case '?' :
case '[' :
case ']' :
ret + = ch;
break ;
default :
{
static const char hex[ ] = "0123456789ABCDEF" ;
char pct[ ] = "% " ;
pct[ 1 ] = hex[ ( ch >> 4 ) & 0xF ] ;
pct[ 2 ] = hex[ ch & 0xF ] ;
ret.append ( pct, 3 ) ;
break ;
}
}
}
}
return ret;
}
int main( )
{
std:: string d = "https://w...content-available-to-author-only...i.de/api/interpreter?data=" + query_encode( "area[\" name\" =\" Nicaragua\" ][\" admin_level\" =\" 2\" ]->.boundaryarea;(node[\" type\" =\" route\" ][\" route\" =\" bus\" ](area.boundaryarea);way[\" type\" =\" route\" ][\" route\" =\" bus\" ](area.boundaryarea);>;relation[\" type\" =\" route\" ][\" route\" =\" bus\" ](area.boundaryarea);>>;);out meta;" ) ;
std:: cout << "Encoded: " + d + "\n " ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RkOjpzdHJpbmcgcXVlcnlfZW5jb2RlKGNvbnN0IHN0ZDo6c3RyaW5nICZzKQp7CiAgICBzdGQ6OnN0cmluZyByZXQ7CgogICAgI2RlZmluZSBJU19CRVRXRUVOKGNoLCBsb3csIGhpZ2gpIChjaCA+PSBsb3cgJiYgY2ggPD0gaGlnaCkKICAgICNkZWZpbmUgSVNfQUxQSEEoY2gpIChJU19CRVRXRUVOKGNoLCAnQScsICdaJykgfHwgSVNfQkVUV0VFTihjaCwgJ2EnLCAneicpKQogICAgI2RlZmluZSBJU19ESUdJVChjaCkgSVNfQkVUV0VFTihjaCwgJzAnLCAnOScpCiAgICAjZGVmaW5lIElTX0hFWERJRyhjaCkgKElTX0RJR0lUKGNoKSB8fCBJU19CRVRXRUVOKGNoLCAnQScsICdGJykgfHwgSVNfQkVUV0VFTihjaCwgJ2EnLCAnZicpKQoKICAgIGZvcihzaXplX3QgaSA9IDA7IGkgPCBzLnNpemUoKTspCiAgICB7CiAgICAgICAgY2hhciBjaCA9IHNbaSsrXTsKCiAgICAgICAgaWYgKElTX0FMUEhBKGNoKSB8fCBJU19ESUdJVChjaCkpCiAgICAgICAgewogICAgICAgICAgICByZXQgKz0gY2g7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKChjaCA9PSAnJScpICYmIElTX0hFWERJRyhzW2krMF0pICYmIElTX0hFWERJRyhzW2krMV0pKQogICAgICAgIHsKICAgICAgICAgICAgcmV0ICs9IHMuc3Vic3RyKGktMSwgMyk7CiAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgc3dpdGNoIChjaCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSAnLSc6CiAgICAgICAgICAgICAgICBjYXNlICcuJzoKICAgICAgICAgICAgICAgIGNhc2UgJ18nOgogICAgICAgICAgICAgICAgY2FzZSAnfic6CiAgICAgICAgICAgICAgICBjYXNlICchJzoKICAgICAgICAgICAgICAgIGNhc2UgJyQnOgogICAgICAgICAgICAgICAgY2FzZSAnJic6CiAgICAgICAgICAgICAgICBjYXNlICdcJyc6CiAgICAgICAgICAgICAgICBjYXNlICcoJzoKICAgICAgICAgICAgICAgIGNhc2UgJyknOgogICAgICAgICAgICAgICAgY2FzZSAnKic6CiAgICAgICAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgICAgIGNhc2UgJywnOgogICAgICAgICAgICAgICAgY2FzZSAnOyc6CiAgICAgICAgICAgICAgICBjYXNlICc9JzoKICAgICAgICAgICAgICAgIGNhc2UgJzonOgogICAgICAgICAgICAgICAgY2FzZSAnQCc6CiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgY2FzZSAnWyc6CiAgICAgICAgICAgICAgICBjYXNlICddJzoKICAgICAgICAgICAgICAgICAgICByZXQgKz0gY2g7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKICAgICAgICAgICAgICAgICAgICBjaGFyIHBjdFtdID0gIiUgICI7CiAgICAgICAgICAgICAgICAgICAgcGN0WzFdID0gaGV4WyhjaCA+PiA0KSAmIDB4Rl07CiAgICAgICAgICAgICAgICAgICAgcGN0WzJdID0gaGV4W2NoICYgMHhGXTsKICAgICAgICAgICAgICAgICAgICByZXQuYXBwZW5kKHBjdCwgMyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldDsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnN0cmluZyBkID0gImh0dHBzOi8vdy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uaS5kZS9hcGkvaW50ZXJwcmV0ZXI/ZGF0YT0iICsgcXVlcnlfZW5jb2RlKCJhcmVhW1wibmFtZVwiPVwiTmljYXJhZ3VhXCJdW1wiYWRtaW5fbGV2ZWxcIj1cIjJcIl0tPi5ib3VuZGFyeWFyZWE7KG5vZGVbXCJ0eXBlXCI9XCJyb3V0ZVwiXVtcInJvdXRlXCI9XCJidXNcIl0oYXJlYS5ib3VuZGFyeWFyZWEpO3dheVtcInR5cGVcIj1cInJvdXRlXCJdW1wicm91dGVcIj1cImJ1c1wiXShhcmVhLmJvdW5kYXJ5YXJlYSk7PjtyZWxhdGlvbltcInR5cGVcIj1cInJvdXRlXCJdW1wicm91dGVcIj1cImJ1c1wiXShhcmVhLmJvdW5kYXJ5YXJlYSk7Pj47KTtvdXQgbWV0YTsiKTsKICAgIHN0ZDo6Y291dCA8PCAiRW5jb2RlZDogIiArIGQgKyAiXG4iOwoJcmV0dXJuIDA7Cn0=