现在的位置: 首页 > 综合 > 正文

替换空格

2013年10月27日 ⁄ 综合 ⁄ 共 1124字 ⁄ 字号 评论关闭

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

分析:

  
第一步:我们可以先扫描一遍字符串,统计空格以及字符的总数,由此可以计算出替换之后的字符串的总长度

  
第二步:
我们从字符串的后面开始赋值和替换,用一个指针指向新字符串的末尾,用另外一个指针指向源字符串的末尾,先移动源字符串的指针,如果指向的是字符,则在新字符串末尾添加同样的字符,并且向前移动两个指针,如果指针指向的是源字符串中的空格,则新字符串出添加“%20”,并且把这个指针向前移动三个

代码如下:

#include<iostream>
#include<cstdio>
bool InvalidInput=false;
using namespace std;
void Replace(char string[],int length);
int main()
{
    char number[30]={'a',' ','g','a',' ','c','g','f'};
    Replace(number,30); //30是原始数组的长度,它的末端都是'\0'
    for(int i=0;number[i]!='\0';i++)
        printf("%c",number[i]);
    return 0;
}
void Replace(char string[],int length)
{
    if(string==NULL||length<=0)
    {
        InvalidInput=true;
        return ;
    }      //处理无效输入
    unsigned int SpaceNumber=0;
     int OriginalLength = 0;
    for(int i=0;string[i]!='\0';i++)
    {
        if(string[i]==' ')
            SpaceNumber++;    //空格的数目
        OriginalLength++;      //字符串的长度
    }
     int NewLength= OriginalLength+2*SpaceNumber;
     int index=NewLength-1;
     //指向新字符串末端的指针
     OriginalLength--;
     //指向原始字符串的指针
     while(OriginalLength>=0&&index>OriginalLength)
     {
         if(string[OriginalLength]==' ')
         {
             string[index--]='0';
             string[index--]='2';
             string[index--]='%';
         }
         else
             string[index--]=string[OriginalLength];
        OriginalLength--;
     }
}

运行结果:

Reference:

名企面试官精讲典型编程题》
何海涛

抱歉!评论已关闭.