題目描述
請實作一個函數,将一個字元串中的空格替換成“%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;
}