【剑指offer】替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
题目不难,就是自己做的不好。
脑子不清晰,也忘了考虑边界条件。
好的思路:
由于空格变成%20多出了两位,所以最后字符串一定变长了。
先统计有多少的空格,length - 1 + 2 * 空格数 就是替换后最后一个字符的位置,从后向前依次赋值即可。
void replaceSpace(char *str,int length) { int n1 = 0; int nb = 0; for (int i=0; str[i]!='\0'; i++){ n1++; if (str[i] == ' ') nb++; } int newn1 = n1 + 2 * nb; str[newn1] = '\0'; int i,j; for (i=n1-1,j=newn1-1; i>=0 && nb>0; i--){ if (str[i] == ' '){ str[j--] = '0'; str[j--] = '2'; str[j--] = '%'; nb--; } else{ str[j--] = str[i]; } } }
我的超挫代码
void replaceSpace(char *str,int length) { char * ss = new char[3 * length]; int i = 0,j = 0; while(i < length) { if(str[i] == ' ') { i++; ss[j++] = '%'; ss[j++] = '2'; ss[j++] = '0'; } else { ss[j++] = str[i++]; } } ss[j] = '\0'; while(j >= 0) { str[j] = ss[j]; j--; } delete ss; }