zoukankan      html  css  js  c++  java
  • 剑指Offer_5_替换空格

    题目描述

    请实现一个函数,将一个字符串中的空格替换成“%20”。
    例如,当字符串为We Are Happy.则经过替换之后的字符串为 We%20Are%20Happy。
       在网络编程中,如果一个URL参数含有特殊字符,如空格,#等,可能导致服务端无法获得准确的参数值。我们需要将这些特殊字符转换成服务端可以识别的字符,转换的规则是在'%'后面跟上ASCII码的两位十六进制表示。比如空格的ASCII码是32,也就是十六进制的0x20,因此空格被替换为了%20 。再比如#的ASCII码为35,即0x23,因此他在URL中应替换为%23 。(URL相关的可以参考我Java爬虫的那几篇) 
       
       将一个空格替换为三个字符 。
       如果按顺序遍历字符串,在保证字符串有足够的空间下,需要对后边的字符串进行大量的移动。 
       较为简单的方法是,遍历一边字符串,记录空格数,假如为字符串原长度为10,空格数为3 , 那么替换后字符串的长度应该为 10+2*3 。
       然后倒序操作字符串,遇到非空格的字符串,则填到扩展位,然后扩展位减一,遇到空格,则在扩展位位置填入'0' ,'2' ,'%' ,每次扩展位各加一 。
     
     1 #include<bits/stdc++.h>
     2 
     3 using namespace std ;
     4 
     5 int main()
     6 {
     7     char c[] = "We are Happy" ;
     8     int len = 13 ;
     9     int num = 0 ; // 空格数
    10     for(int i=0;i<len;i++){
    11         if(c[i]==0x20){
    12             num ++ ;
    13         }
    14     }
    15 
    16     int newLen = len + 2 * num ; // 替换后字符串应该的长度
    17     char *a = new char[newLen]; 
    18     for(int i=len-1;i>=0;i--){
    19         if(c[i]!=0x20){
    20             a[newLen--] = c[i] ;
    21         }else {
    22             a[newLen--] = '0';
    23             a[newLen--] = '2';
    24             a[newLen--] = '%';
    25         }
    26     }
    27     cout << a <<endl ;
    28     return 0 ;
    29 }
     
     
     
         
  • 相关阅读:
    linux修改host文件
    SpringBoot RocketMQ 整合使用和监控
    Linux的五个查找命令
    github 在线创建文件和创建文件夹
    nginx 配置
    JetBrains 里不为人知的秘密(3)--快捷键篇
    java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference;
    【数论】P1029 最大公约数和最小公倍数问题
    ST表学习笔记
    树状数组学习笔记
  • 原文地址:https://www.cnblogs.com/LexMoon/p/Offer_5.html
Copyright © 2011-2022 走看看