替换空格

描述

请实现一个函数,将一个字符串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;

.......~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~..........

 牛客网的链接:替换空格_牛客题霸_牛客网

这篇文章字超级多,应该有很多人不爱看,我以前也这样,但是其实仔细仔细去看看,还是会发现很多收获的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值