//1. /*char* replaceSpace(char* s) { char* ret = NULL; char* tmp = NULL; int count = 0; char* arr = "%20"; size_t len = strlen(s); char* k = s; while (*k != '\0') { if (*k == ' ') { count++; } k++; } ret = (char*)malloc(len + 3 * count + 1); if (ret == NULL) { perror("malloc"); return NULL; } else { tmp = ret; } while (*s != '\0') { if (*s == ' ') { int i = 0; int j = 0; char* pr = arr; for (i = 0; i < 3; i++) { *ret = *pr; j++; if (j == 3) { break; } ret++; pr++; } } else { *ret = *s; } s++; ret++; } *ret = *s; return tmp; }*/ //2. #include<assert.h> char* replaceSpace(char* s) { assert(s); int i = 0; int j = 0; char* p = s; int spacecnt = 0; //计算空格个数 while (*p) { if (*p == ' ') { spacecnt++; } p++; } int length = strlen(s); int newlen = length + spacecnt * 2; int end1 = length - 1; int end2 = newlen - 1; char* r = (char*)malloc(sizeof(char) * newlen + 1); for(i = end1,j = end2; i >= 0; i--,j--) { if(s[i] == ' ') { r[j--] = '0'; r[j--] = '2'; r[j] = '%'; } else { r[j] = s[i]; } } r[newlen] = '\0'; return r; }