【剑指offer】替换空格问题

题目:实现一个函数,把字符串中每个空格都替换成%20,例如输入“we are happy!!!”,输出“we%20are%20happy!!!”

思路:

1、若内存够多,可另开辟一足够大字符串,在新字符串上做替换,实现思路简单。
2、在原来字符串上修改,并保证后面有足够空间。

代码:

void ReplaceBlank(char* str,int strsize)
{
    if (str == NULL || strsize <= 0)
    {
        return;
    }

    int countBlank = 0;
    int countStr = 0;
    char* p = str;
    while (*(p) != '\0')
    {
        countStr++;

        if (*p == ' ')
        {
            countBlank++;
        }
        p++;
    }
    int newLength = countStr + 2 * countBlank;
    if (newLength > strsize)   //存不下
    {
        return;
    }
    while (countStr >= 0 && newLength > countStr)
    {
        if (str[countStr] != ' ')
        {
            str[newLength--] = str[countStr--];
        }
        else   //遇到空格
        {
            str[newLength--] = '0';
            str[newLength--] = '2';
            str[newLength--] = '%';
            countStr--;
        }

    }
}



int main()
{
    char str[50] = "we are happy!!!";
    int sz = strlen(str);
    ReplaceBlank(str,50);
    cout << str << endl;
    system("pause");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值