• 替换空格


    题目:请实现一个函数,把字符串中的每个空格替换成“%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 }

  • 相关阅读:
    [noip2018]day1
    [CF1110d]JONGMAH
    BZOJ 2733 [HNOI2012]永无乡
    BZOJ 3123 [SDOI2013] 森林
    Nowcoder 练习赛26E 树上路径
    Luogu 2575 高手过招-SG函数
    BZOJ 1123[POI2008]BLO-Tarjan
    Nowcoder OI赛制测试2 F 假的数学题
    Luogu 2467[SDOI2010]地精部落
    Luogu 2216[HAOI2007]理想的正方形
  • 原文地址:https://www.cnblogs.com/sankexin/p/5644386.html
Copyright © 2020-2023  润新知