剑指offer-面试题5-替换空格

替换空格

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

拿到这个题时,第一个要考虑的就是内存够不够的问题。因为原来空格是一个字符,现在要将一个空格替换为三个字符,内存会变大。现在假设是在内存足够的情况下修改。
过程如下:
完成一个空格的替换:
这里写图片描述
完成替换:
这里写图片描述

测试用例的考虑:

  • 正确输入:空格位于最前面;空格位于中间;空格位于最后;连续多个空格
  • 错误输入:无空格
  • 非法输入:空指针;空字符串;只有连续多个空格

代码如下:

void ChangeStr(char* arr,int sz)
{
    if(arr==NULL||sz<0)
    {
        //非法输入
        //对输入的判断
        return;
    }
    int i=0;
    int old_len=0;
    int space=0;
    for(i=0;i<sz;i++)
    {
        if(arr[i]!='\0')
        {
            old_len++;
        }
        if(arr[i]==' ')
        {
            space++;
        }
    }
    int new_len=old_len+2*space;
    if(new_len>sz)
    {
        //对大小的溢出的判断    
        return;
    }
    int index1=old_len;
    int index2=new_len;
    while(index1>=0&&index2>index1)
     {
        if(arr[index1]==' ')
        {
            arr[index2--]='0';
            arr[index2--]='2';
            arr[index2--]='%';
        }
        else
        {
            arr[index2--]=arr[index1];
        }
        --index1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值