Post date: Jul 04, 2013 7:36:28 AM
Problem
input: "kitten%20pic.jpg"
output: "kitten pic.jpg"
%20 -> ' '
%3A -> '?'
%3D -> ':'
modify your input in place.
no string library functions.
void DecodeURL(string str)
Solution
/*
============================================================================
Author : James Chen
Email : a.james.chen@gmail.com
Description : Replace string in specified patterns
Created Date : 4-July-2013
Last Modified :
============================================================================
*/
#include <iostream>
#include <iomanip>
#include <limits>
#include <cassert>
#include <string>
using namespace std;
static string DecodeURL(string url)
{
if(url.size() < 3)
{
return url;
}
int i = 0;
int len = url.size();
int j = 0;
while( i < len)
{
if (url[i] == '%' && i < len - 2)
{
if (url[i + 1] == '2' && url[i + 2] == '0')
{
url[j++] = ' ';
i += 3;
}
else if (url[i + 1] == '3' && url[i + 2] == 'A')
{
url[j++] = '?';
i += 3;
}
else if (url[i + 1] == '3' && url[i + 2] == 'D')
{
url[j++] = ':';
i += 3;
}
else
{
url[j++] = url[i++];
}
}
else
{
url[j++] = url[i++];
}
}
return string(url.c_str(), j);
}
static void DoTest(string url)
{
cout << "Before processing:" << endl;
cout << url << endl;
cout << "After processing:" << endl;
cout << DecodeURL(url) << endl;
cout << "----------------------" << endl;
}
void main(int argc, char* argv[])
{
DoTest("kitten%20pic.jpg");
DoTest("%20kittenpic.jpg");
DoTest("kittenpic.jpg%20");
DoTest("kitten%3Apic.jpg");
DoTest("%3Akittenpic.jpg");
DoTest("kittenpic.jpg%3A");
DoTest("kitten%3Dpic.jpg");
DoTest("%3Dkittenpic.jpg");
DoTest("kittenpic.jpg%3D");
DoTest("kitten%3Epic.jpg");
DoTest("%3Ekittenpic.jpg");
DoTest("kittenpic.jpg%3E");
DoTest("kitten%3D%3A%20pic.jpg");
DoTest("%20%3A%3Dkittenpic.jpg");
DoTest("kittenpic.jpg%3D%20%3A");
}
Output
Before processing:
kitten%20pic.jpg
After processing:
kitten pic.jpg
----------------------
Before processing:
%20kittenpic.jpg
After processing:
kittenpic.jpg
----------------------
Before processing:
kittenpic.jpg%20
After processing:
kittenpic.jpg
----------------------
Before processing:
kitten%3Apic.jpg
After processing:
kitten?pic.jpg
----------------------
Before processing:
%3Akittenpic.jpg
After processing:
?kittenpic.jpg
----------------------
Before processing:
kittenpic.jpg%3A
After processing:
kittenpic.jpg?
----------------------
Before processing:
kitten%3Dpic.jpg
After processing:
kitten:pic.jpg
----------------------
Before processing:
%3Dkittenpic.jpg
After processing:
:kittenpic.jpg
----------------------
Before processing:
kittenpic.jpg%3D
After processing:
kittenpic.jpg:
----------------------
Before processing:
kitten%3Epic.jpg
After processing:
kitten%3Epic.jpg
----------------------
Before processing:
%3Ekittenpic.jpg
After processing:
%3Ekittenpic.jpg
----------------------
Before processing:
kittenpic.jpg%3E
After processing:
kittenpic.jpg%3E
----------------------
Before processing:
kitten%3D%3A%20pic.jpg
After processing:
kitten:? pic.jpg
----------------------
Before processing:
%20%3A%3Dkittenpic.jpg
After processing:
?:kittenpic.jpg
----------------------
Before processing:
kittenpic.jpg%3D%20%3A
After processing:
kittenpic.jpg: ?
----------------------
Press any key to continue . . .