剑指offer之替换空格

题目:

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

分析:

如果从前往后替换字符串,那么保存在空格后面的字符串肯定会被覆盖,那么我们就考虑从后往前进行替换。

  1. 首先遍历原字符串,找出字符串的长度以及其中的空格数量,
  2. 根据原字符串的长度和空格的数量我们可以求出最后新字符串的长度。
  3. 设置两个指针point1和point2分别指向原字符串和新字符串的末尾位置。
  4. 如果point1指向内容不为空格,那么将内容赋值给point2指向的位置,如果point1指向为空格,那么从point2开始赋值“02%”
  5. 直到point1==point2时表明字符串中的所有空格都已经替换完毕。

代码:
void  replacespace( char  string[],  int  length) {
     int  blanknumber = 0;
     int  i;
     for  (i = 0; string[i] !=  '\0' ; i++) {
         if  (string[i] ==  ' ' ) {
             blanknumber++;
         }
     }
     int  k = i + 2 * blanknumber;
     if  (k > length)
         return ;
     string[k]= '\0' ; //此行必不可少
     int  point1 = i - 1, point2 = k-1;
     for  (; point1 >= 0 && point2 > point1; point1--) {
         if  (string[point1] ==  ' ' ) {
             string[point2--] =  '0' ;
             string[point2--] =  '2' ;
             string[point2--] =  '%' ;
         else
             string[point2--] = string[point1];
     }
}

Java代码:
  public static String ReplaceBlank(String str) 
  {
if(str == null || str.length() < 0)
         {
return null;
}
int originalLength = 0;
int numberOfBlank = 0;
int i = 0;
while(i < str.length())
         { //计算空格数
if(str.charAt(i) == ' ')
numberOfBlank++;
++i;
}



        int indexOfOriginal = str.length();
        int indexOfNew = str.length() + numberOfBlank*2;
        char[] chs = new char[indexOfNew];
        indexOfNew--;
        while(indexOfOriginal >=0 && indexOfNew >=0) {
        indexOfOriginal--;
        if(str.charAt(indexOfOriginal) == ' ') 
                {
        chs[indexOfNew--] = '0';
        chs[indexOfNew--] = '2';
        chs[indexOfNew--] = '%';
        } else {
        chs[indexOfNew--] = str.charAt(indexOfOriginal);
        }
       
        }
        
        return String.valueOf(chs);    
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值