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 " " (space) %20 "!" (exclamation point) %21 "$" (dollar sign) %24 "%" (percent sign) %25 "(" (left parenthesis) %28 ")" (right parenthesis) %29 "*" (asterisk) %2a |
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! http://icpc.baylor.edu/icpc/ plain_vanilla (**) ? the 7% solution # |
Sample Output
Happy%20Joy%20Joy%21 http://icpc.baylor.edu/icpc/ plain_vanilla %28%2a%2a%29 ? the%207%25%20solution |
|
Source
Mid-Central USA 2007
|
Recommend
teddy
|
第一次直接用了cin输入,遇到空格就从新输入了,假如输入Happy Joy Joy! 相当于输了3个字符串,因此这里需要用到gets() 函数。
另外不知道为什么,刚开始头文件用<cstdio> <string> 没有通过。代码附下:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
int i, len;
char a[1000];
while (gets(a)){
len = strlen(a);
if (len == 1 && a[0] == '#')
break;
for (i = 0; i < len; i++){
if (a[i] == ' ')
cout << "%20";
else if (a[i] == '!'){
cout << "%21";
}
else if (a[i] == '$'){
cout << "%24";
}
else if (a[i] == '%'){
cout << "%25";
}
else if (a[i] == '('){
cout << "%28";
}
else if (a[i] == ')'){
cout << "%29";
}
else if (a[i] == '*'){
cout << "%2a";
}
else{
cout << a[i];
}
}
cout << endl;
}
return 0;
}