热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

面试题2:替换空格

来源:《剑指Offer》题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”wearehappy”,则输出”we%20are%20happy”。分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增

来源:《剑指Offer》 题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。 分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增

来源:《剑指Offer》

题目:请实现一个函数,把字符串的每个空格替换成”%20”,原字符串后面有足够的空间,要求在原字符串上操作。例如输入”we are happy”,则输出”we%20are%20happy”。

分析:先遍历一遍统计出空格数,一个空格替换成三个字符,长度增加了2,N个空格,长度增加2N。则
替换后的字符串长度 = 原字符串长度 + 2N
设置两个指针,一个指向原字符串末尾,一个指向新字符串末尾。第二遍遍历,从后往前遍历。将原字符串最后一个字符复制到新字符串最后一个字符的位置,两个指针同时前移。当原字符串遇到空格,在新字符串对应位置插入”%20”三个字符,接着原字符串指针前移1位,新字符串指针前移3位。如此操作,直到原字符串第一个字符也复制完结束。

代码(C++):

#include
using namespace std;

#define MAX_LEN 100

/*
    函数功能:替换字符串中的空格
  */
void replaceBlank(char data[])
{
    int i=0,j;
    int old_len;
    int new_len;
    int blank_num=0;
    // 遍历一遍,找出空格数
    while(data[i]!='\0')
    {
        if(data[i]==' ')
        {
            blank_num++;
        }
        i++;
    }
    //-----------这里是关键------------

    // 原来字符串长度
    old_len=i+1;
    // 计算新字符串长度
    new_len=old_len+2*blank_num;
    // 重置i,j
    i=old_len-1;
    j=new_len - 1;

    //-----------这里是关键------------


    // 再遍历一遍,替换空格
    while(i>=0)
    {
        if(data[i]!=' ')
        {
            data[j]=data[i];        
            j--;
        }
        else
        {
            data[j]='0';
            data[j-1]='2';
            data[j-2]='%';
            j-=3;
        }
        i--;
    }

}
int main()
{
    char str[MAX_LEN];// 声明一个字符数组

    // 输入数组
    cout<<"请输入一个字符串,不超过20个字符"<// 替换
    replaceBlank(str);
    // 打印
    cout<return 0;
}


推荐阅读
author-avatar
bluelucky2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有