-
题目描述:
-
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
-
输入:
-
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
-
输出:
-
对应每个测试案例,出经过处理后的字符串。
-
-
第一种解法:不是空格直接输出,是空格输出%20.
-
#include<cstdio> #include<cstring> #include<cstdlib> char str[100000001]; int main() { while(gets(str)) { int len = strlen(str); for(int i = 0; i < len; i++) { if(str[i] != ' ') printf("%c",str[i]); else { printf("%%20"); } } printf("\n"); memset(str,0,sizeof(str)); } return 0; }
第二种解法:将原来的字符串替换。先遍历一次字符串,统计字符串空格数,并算出替换后的字符串总长度。然后从后面开始复制和替换。时间复杂度为O(n)。 -
#include<cstdio> #include<cstring> #include<cstdlib> char str[10000001]; void ReplaceBlank(char string[]) { //originalLength为字符串string的实际长度 int originalLength = 0; int numberOfBlank = 0; int i = 0; while(string[i] != '\0') { ++originalLength; if(string[i] == ' ') ++numberOfBlank; ++i; } int newLength = originalLength + numberOfBlank * 2; int indexOfOriginal = originalLength; int indexOfNew = newLength; while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if(string[indexOfOriginal] == ' ') { string[indexOfNew--] = '0'; string[indexOfNew--] = '2'; string[indexOfNew--] = '%'; } else { string[indexOfNew--] = string[indexOfOriginal]; } --indexOfOriginal; } } int main() { while(gets(str)) { ReplaceBlank(str); printf("%s\n",str); } return 0; }