题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
思路1: 从头开始
1、新建一个数组p,从头开始遍历原数组str
2、若str中某位置数据不为空格,则p中对应位置改为该数据
3、若str中某位置数据为空格,则p中对应位置改为%20,可用strcat代劳
4、最后把p中内容拷到str中,用strcpy
优点:简单好想。
void replaceSpace(char *str,int length) {
int l = 3*length;
char p[l];
memset(p, 0, l);
int j=0;
for(int i=0; i<length; i++)
{
if(str[i] != ' ')
{
p[j] = str[i];
j++;
}
else
{
strcat(p,"%20");
j += 3;
}
}
p[j] = '\0';
strcpy(str,p);
}
思路2: 从尾开始
1、先遍历一遍数组str,统计数组长度 i 与空格数量 n_space,则新数组长度 cnt = i + 2*n_space
2、利用 i 从str数组未尾开始遍历,直接把改动加在str上
3、若str中某位置数据不为空格,则str中对应位置改为该数据
4、若str中某位置数据为空格,则str中对应位置改为%20
优点:占用空间小
void replaceSpace(char *str,int length) {
if(str == NULL) return;
int i = 0 , n_space = 0;
while( str[i])
{
if(str[i] == ' ')
{
n_space++;
}
i++;
}
int cnt = i+2*n_space; // 求新数组长度 cnt
str[cnt] = '\0'; // str末尾补个'\0'
while(i && cnt > i) // cnt = i 时说明 接下来已经没有空格了,保持原样即可,提高速度
{
if(str[--i] != ' ')
{
str[--cnt] = str[i];
}
else
{
str[--cnt] = '0';
str[--cnt] = '2';
str[--cnt] = '%';
}
}
}