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

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

    思路:我们可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以由此计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来的长度加上2乘以空格数目。我们以字符串"We are happy."为例,"We are happy."这个字符串的长度是14(包括结尾符号''),里面有两个空格,因此替换之后字符串的长度是18。

          我们从字符串的后面开始复制和替换。首先准备两个指针,P1和P2。P1指向原始字符串的末尾,而P2指向替换之后的字符串的末尾(如图(a)所示)。接下来我们向前移动指针P1,逐个把它指向的字符复制到P2指向的位置,直到碰到第一个空格为止。此时字符串包含如图(b)所示,灰色背景的区域是做了字符拷贝(移动)的区域。碰到第一个空格之后,把P1向前移动1格,在P2之前插入字符串"%20"。由于"%20"的长度为3,同时也要把P2向前移动3格如图(c)所示。

         我们接着向前复制,直到碰到第二个空格(如图(d)所示)。和上一次一样,我们再把P1向前移动1格,并把P2向前移动3格插入"%20"(如图(e)所示)。此时P1和P2指向同一位置,表明所有空格都已经替换完毕

     1 #include <string>
     2 #include "stdafx.h"
     3 
     4 void ReplaceBlank(char string[], int length)
     5 {
     6     if(string == NULL && length <= 0)
     7         return;
     8 
     9     int originalLength = 0;
    10     int numberOfBlank = 0;
    11     int i = 0;
    12 
    13     while(string[i] != '')
    14     {
    15         ++ originalLength;
    16 
    17         if(string[i] == ' ')
    18             ++ numberOfBlank;
    19 
    20         ++ i;
    21     }
    22     
    23     //newLength 为把空格替换为'%20'之后的长度 
    24     int newLength = originalLength + numberOfBlank * 2;
    25     if(newLength > length)
    26         return;
    27 
    28     int indexOfOriginal = originalLength;
    29     int indexOfNew = newLength;
    30     
    31     //若没有空格 直接跳过 
    32     while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
    33     {
    34         if(string[indexOfOriginal] == ' ')
    35         {
    36             string[indexOfNew --] = '0';
    37             string[indexOfNew --] = '2';
    38             string[indexOfNew --] = '%';
    39             //先使用再减一 
    40         }
    41         else
    42         {
    43             string[indexOfNew --] = string[indexOfOriginal];
    44         }
    45 
    46         -- indexOfOriginal;
    47     }
    48 }
    49 
    50 int main()
    51 {
    52     const int length = 100;
    53 
    54     char string[length] = "We are happy";
    55     printf("%s
    ",string);
    56     ReplaceBlank(string, length);
    57     printf("%s
    ",string);
    58     
    59     char string1[length] = " ";
    60     printf("%s
    ", string1);
    61     ReplaceBlank(string1, length);
    62     printf("%s
    ", string1);
    63     
    64     return 0;
    65 }

  • 相关阅读:
    idea整合SVN以及SVN的使用
    解决svn检出后不显示图标的问题
    使用Nexus搭建Maven私服
    Idea中使用Maven
    初识Maven
    外网映射
    php 获取远程图片
    PHP中$_POST,$_GET,$_REQUEST,$_FILES全局变量的全局指什么
    linux定时执行文件
    PHP二维码生成的方法(google APi,PHP类库,libqrencode等)
  • 原文地址:https://www.cnblogs.com/sankexin/p/5644386.html
Copyright © 2011-2022 走看看