剑指Offer面试题:3.替换空格建议收藏

一题目:替换空格在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

一 题目:替换空格

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

  在网络编程中,如果URL参数中含有特殊字符,如空格、’#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%’后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成”%20″。再比如’#’的ASCII码为35,即十六进制的0x23,它在URL中被替换为”%23″。

二 代码实现

O(n2)解法

  最直观的做法是从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换成3个字符,我们必须要把空格后面所有的字符都后移两个字节,否则就有两个字符被覆盖了。

  假设字符串的长度是n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n2)。

O(n)解法

#include "stdio.h"
#include <iostream>
using namespace std;

// 在不适用另外的buff的情况下将空格替换为字符串
char cBuff[100] = "We are happy!";
void ReplaceBlank(char *cBuff)
{
    char cVal;
    int i = 0;
    int nBlankNum = 0; // 统计空格的数目
    int nBuffLen = 0;
    
    while((cVal = cBuff[i++]) && (cVal != '\0'))
    {
        if (cVal == ' ')
        {
            nBlankNum ++;
        }
        nBuffLen ++;

    }
    cout << "字符串长度:"<< nBuffLen << "空格个数:"<< nBlankNum << endl;

    for (int k = nBlankNum*2 + nBuffLen, j = nBuffLen-1; j >=0 && k >= 0;j--)
    {
        if (cBuff[j] == ' ')
        {
            cBuff[--k] = '0';
            cBuff[--k] = '2';
            cBuff[--k] = '%';
        }
        else
        {
            cBuff[--k] = cBuff[j];
        }    
    }

    cout << "转换后的字符串:"<< cBuff << endl;
}
void main()
{
    ReplaceBlank(cBuff);
    return;
}

剑指Offer面试题:3.替换空格建议收藏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120173.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python中的float类型计算精度不高的问题(已解决)

    python中的float类型计算精度不高的问题(已解决)说的可能比较啰嗦。在洛谷P2181对角线问题中,按照高中所学的组合数可推答案为Cn4(该题题解中有详细过程,这里不多赘述),问题在本文中并不重要。但题中有一个有意思的点,就是题目的答案是非常大

    2022年7月6日
  • 物联网流量卡管理系统源码_物联网数据管理系统结构

    物联网流量卡管理系统源码_物联网数据管理系统结构物联网卡管理平台源码-物联网卡管理系统源码V5.0版本内置十余条的第三方管理平台,如申达、硕朗、天移、奇成等可以直接对接内置微信商户、免签支付、支付宝当面付内置安装教程,从购买服务器到安装完成,仅需5步!………………………………………………………

    2022年9月26日
  • 守护线程和非守护线程_java守护线程的作用

    守护线程和非守护线程_java守护线程的作用Java中有两类线程:UserThread(用户线程)、DaemonThread(守护线程)用户线程即运行在前台的线程,而守护线程是运行在后台的线程。守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为没有如果没有了被守护这,也就没有继续运行程…

    2022年10月15日
  • CAD拉伸的快捷命令_cad拉伸实体快捷键

    CAD拉伸的快捷命令_cad拉伸实体快捷键CAD快捷键在CAD绘图中是不可或缺的,刚入门CAD的小伙伴们一定要熟练掌握常用CAD快捷键命令的使用。那么CAD拉伸快捷键命令是什么呢?又该如何使用呢?下面小编就来给大家介绍一下浩辰CAD软件中CA

    2022年8月4日
  • php rdkafka_php rdkafka

    php rdkafka_php rdkafkaKafka是一种分布式的,基于发布/订阅的消息系统。在使用PHP处理Kafka消息的时候需要使用一个PHP的扩展php-rdkafka下面将介绍一下如何在Linux/MacOS下安装php-rdkafka在使用php-rdkafka之前需要先安装好librdkafkaisaClibraryimplementationoftheApacheK…

    2022年10月14日
  • python 列转行_SQL 行转列,列转行「建议收藏」

    python 列转行_SQL 行转列,列转行「建议收藏」SQL行转列,列转行行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有下表:SELECT*FROMstudentPIVOT(SUM(score)FORsubjectIN(语文,数学,英语))通过上面SQL语句即可得到下面的结果PIVOT后跟一个聚合函数来拿到结果,FOR后面跟的科目是我们要…

    2022年6月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号