标签:
题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
此类型的算法可以适用于很多方面,像数组的合并。思想是从数组的后边向前合并,而不是从前向后。
1 #include<stdio.h> 2 #include<string.h> 3 4 void ReplaceBlank(char *string, int length){ 5 if(string == NULL || length <= 0){ 6 return; 7 } 8 int i = 0; 9 int isSpace = 0; 10 int len = strlen(string); 11 12 while(string[i] != ‘\0‘){ 13 if(string[i] == ‘ ‘){ 14 ++isSpace; //求出有多少个空格 15 } 16 ++i; 17 } 18 19 int newLen = len + 2 * isSpace; //每添加一个“%20”数组会向后移动两个空格(已经有一个空格了),newLen表示新数组的空间 20 // printf("%d\n", newLen); 21 22 int indexLen = newLen; 23 24 while(indexLen > len && len >= 0){ //从后向前,每遇到一个空格就向数组里添加“%20” 25 if(string[len] == ‘ ‘){ 26 string[indexLen--] = ‘0‘; 27 string[indexLen--] = ‘2‘; 28 string[indexLen--] = ‘%‘; 29 } 30 else{ 31 string[indexLen--] = string[len]; 32 // len--; 33 // indexLen--; 34 } 35 len--; 36 } 37 } 38 39 int main(){
/*
测试数据
*/
40 char p[1000000]; 41 fgets(p, sizeof(p)-1, stdin); 42 ReplaceBlank(p, 2); 43 puts(p); 44 return 0; 45 }
标签:
原文地址:http://www.cnblogs.com/dormant/p/5300968.html