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 }
     
     
     
         
  • 相关阅读:
    Week03-面向对象入门
    Week02-Java基本语法与类库
    201621123056 《Java程序设计》第1周学习总结
    2.2确定一个字符是否在指定范围内
    2.1确定一个char包含何种字符
    1.自己写一个计算器demo
    1.23 确定一个Decimal或Double的整数部分
    1.5 测试奇偶性
    1.2度转化为弧度 1.3弧度转换为度
    1.1确定分数与浮点数值之间的近似相等性。
  • 原文地址:https://www.cnblogs.com/LexMoon/p/Offer_5.html
Copyright © 2011-2022 走看看