描述
请实现一个函数,将一个字符串s中的每个空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
数据范围:
0≤len(s)≤1000 0 \le len(s) \le 1000 \ 0≤len(s)≤1000
(保证字符串中的字符为大写英文字母、小写英文字母和空格中的一种。)
示例1
输入:"We Are Happy"
返回值:"We%20Are%20Happy"
示例2
输入:" "
返回值:"%20"
说简单也简单,说难也难。
这题最主要的是空间的分配吧!
可能很多宝第一想法就是跟我一样,直接用数组
if (S[i]==' ')
S[i]='%20';
然后就会报错,这里最主要的原因就在于,%20是字符串,‘ ’是字符。
所以还是要用指针,相信大部分人对于指针都是保持着一种抗拒的心理,ohno,我也是。但是还是要使用哦。
char* replaceSpace(char* s ) {
int i=0,j=0;
int cup = strlen(s);
while(s[i]!='\0'){
if(s[i]==' '){
cup+=3;
}
i++;
}
i=0;
char *c = (char*)malloc(sizeof(char)*(cup));/注意点
while(s[i]!='\0'){
if(s[i]==' '){
c[j++] = '%';
c[j++]= '2';
c[j++] = '0';
i++;
}
else{
c[j]=s[i];
j++;
i++;
}
}
// c[j]='\0';
return c;
}
最后的写法就是这个样子了。
我还是太菜了一点点,也可以说是不够细心吧,我没有分配指针的空间就算,一直显示越界,我还是没找到自己的bug。最后看了下答案才发现的要分配空间,宝们就别学我了。
这里的话,要运算两次while的最主要的原因是,你不确定你要分配的空间是多大,如果分配最大的空间的话,又会导致运算的超时,同时也浪费空间,因此,要先用一个while去判断当中有多少空格需要转换为%20。
一个空格的空间就需要变成三个空间,也就是说,遇到一个空格的话,我们开出来的空间就要多加三个,也就是上面的cup+=3;
.......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..........
牛客网的链接:替换空格_牛客题霸_牛客网
这篇文章字超级多,应该有很多人不爱看,我以前也这样,但是其实仔细仔细去看看,还是会发现很多收获的。