Problem Description
Uniform Resource Identifiers (or URIs) are strings like http://icpc.baylor.edu/icpc/, mailto:foo@bar.org, ftp://127.0.0.1/pub/linux, or even just readme.txt that are used to identify a resource, usually on the Internet or a local computer. Certain characters are reserved within URIs, and if a reserved character is part of an identifier then it must be percent-encoded by replacing it with a percent sign followed by two hexadecimal digits representing the ASCII code of the character. A table of seven reserved characters and their encodings is shown below. Your job is to write a program that can percent-encode a string of characters.
Character Encoding |
Input
The input consists of one or more strings, each 1–79 characters
long and on a line by itself, followed by a line containing only "#" that signals the end of the input. The character "#" is used only as an end-of-input marker and will not appear anywhere else in the input. A string may contain spaces, but not at the beginning or end of the string, and there will never be two or more consecutive spaces. |
Output
For each input string, replace every occurrence of a reserved
character in the table above by its percent-encoding, exactly as shown, and output the resulting string on a line by itself. Note that the percent-encoding for an asterisk is %2a (with a lowercase "a") rather than %2A (with an uppercase "A"). |
Sample Input
Happy Joy Joy! |
Sample Output
Happy%20Joy%20Joy%21 |
#include<stdio.h>
void main()
{
char a[1000];
int n;
while(1)
{
gets(a);
//getchar();
if(a[0]=='#')
return;
for(int j=0;a[j]!='\0';j++);
j++; n=j;
for(int i=0;a[i]!='\0';i++)
{
switch(a[i])
{
case ' ' :
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='0';
i=i+2;
j=n=n+2;
break;
case '!':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='1';
i=i+2;
j=n=n+2;
break;
case '$':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='4';
i=i+2;
j=n=n+2;
break;
case '%':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='5';
i=i+2;
j=n=n+2;
break;
case '(':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='8';
i=i+2;
j=n=n+2;
break;
case ')':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='9';
i=i+2;
j=n=n+2;
break;
case '*':
for(;j>i;j--)
a[j+2]=a[j];
a[i]='%';
a[i+1]='2';
a[i+2]='a';
i=i+2;
j=n=n+2;
break;
}
}
printf("%s\n",a);
}
}