【九章斩题录】Leetcode:面试题 01.03. URL化(C/C++)

     精品题解 🔥 《九章斩题录》  👈 猛戳订阅


面试题 01.03. URL化

📚 题目:URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)

示例 1:

输入:"Mr John Smith    ", 13
输出:"Mr%20John%20Smith"

示例 2:

输入:"               ", 5
输出:"%20%20%20%20%20"

✅ 模板:C++

class Solution {
public:string replaceSpaces(string S, int length) {}
};


💡 思路:重开一个新的数组,然后遍历字符串的每个字符,如果字符是空格就添加 %20 到数组中,不是就直接添加当前字符。最后返回字符串就行,值得注意的是这里要求我们知道字符串真实长度,所以范围就别用 S.size() 了,直接用它提供的 length 形参。

💬 代码演示:

class Solution {
public:string replaceSpaces(string S, int length) {string ans;for (int i = 0; i < length; i++) {if (S[i] == ' ') {ans += "%20";} else {ans += S[i];}}return ans;}
};

什么是 url 化?

URL化,也称为URL编码或百分号编码,是一种将特殊字符和非安全字符转换为URL安全格式的过程。URL化是因为URL(Uniform Resource Locator)中只能包含特定字符集合,如果URL中包含不安全的字符,或者需要传输的数据中包含特殊字符(如空格、标点符号等),就需要对它们进行编码,以确保它们在URL中不引起混淆或错误。

URL化的主要目的

防止URL中的特殊字符干扰URL的解析和传输。

确保URL在各种网络和浏览器环境中都能正确解释和显示。

允许在URL中包含各种字符,包括非ASCII字符,以支持多语言和国际化的URL。

URL化的基本规则

将要编码的字符转换为其ASCII值的十六进制表示,并在前面添加一个百分号 "%"。例如,空格字符(ASCII值为32)会编码为"%20"。

保留一些特殊字符,如字母、数字、连字符、下划线和句点,它们不需要编码。

对于非ASCII字符,通常使用 UTF-8 编码对其进行URL化。

以下是一些常见的URL编码示例:

  • 空格编码为 "%20"
  • 斜杠 "/" 编码为 "%2F"
  • 问号 "?" 编码为 "%3F"
  • 等号 "=" 编码为 "%3D"
  • 百分号 "%" 编码为 "%25"

💭 代码演示:

#include <iostream>
#include <string>
#include <cctype> // 用于判断字符的函数// 函数将字符编码为URL安全格式
std::string urlEncode(const std::string& input) {std::string encoded;for (char c : input) {if (std::isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {// 如果是字母、数字、连字符、下划线、点或波浪线,保留不变encoded += c;} else {// 否则,将字符编码为百分号编码char buffer[4];snprintf(buffer, sizeof(buffer), "%%%02X", static_cast<unsigned char>(c));encoded += buffer;}}return encoded;
}int main() {std::string input = "Hello World! How are you?";std::string encoded = urlEncode(input);std::cout << "Original: " << input << std::endl;std::cout << "Encoded: " << encoded << std::endl;return 0;
}

🚩 运行结果如下:

Original: Hello World! How are you?
Encoded: Hello%20World%21%20How%20are%20you%3F

原始字符串中的空格被编码为 %20,感叹号被编码为 %21,问号被编码为 %3F,这是URL编码的标准结果。其他字符保持不变。

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2023.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

牛客网. 剑指offer 题解 [EB/OL]. []. https://www.nowcoder.com/exam/oj/ta?tpId=13.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JDK21】详解虚拟线程

目录 1.概述 2.虚拟线程是为了解决哪些问题 2.1.线程切换的巨大代价 2.2.哪些情况会造成线程的切换 2.3.线程资源是有限的 3.虚拟线程 4.适用场景 1.概述 你发任你发&#xff0c;我用JAVA8&#xff1f;JDK21可能要对这句话say no了。 现在Oracle JDK是每4个版本&#x…

最新版小权云黑系统 骗子添加查询源码

小权云黑系统添加骗子&#xff0c;查询骗子&#xff0c;可添加团队后台方便审核用&#xff0c;在线反馈留言系统&#xff0c;前台提交骗子&#xff0c;后台需要审核才能过&#xff0c;后台使用光年UI界面&#xff0c;新增导航列表&#xff0c;可给网站添加导航友链&#xff0c;…

qt国际化多语言

vs + qt 方法 一 (1)生成.pro文件 如果报错: cannot find any qt projects to export 则执行如下: 然后重新生成 pro文件。 (2)生成ts文件 (方法1)在项目文件(xxx.pro) 文件添加: TRANSLATIONS += en.ts zh_CN.ts 然后打开cmd命令,进入项目目录,执行 l…

vue使用slot封装navBar

vue使用slot封装navBar 1、创建navBar.vue文件 <template><div><div class"headerBar"><div><div v-if"showLeft" class"left"><div v-if"leftText">{{ leftText }}</div><slot name&…

Spring中的循环依赖问题

目录 1、什么是Spring的循环依赖&#xff1f; 2、如何避免循环依赖问题&#xff1f; 3、Spring的三级缓存 小结 1、什么是Spring的循环依赖&#xff1f; Spring框架中的循环依赖问题是指两个或多个bean之间相互依赖&#xff0c;形成闭环&#xff0c;导致无法完成实例化的问…

【力扣】907.子数组的最小值之和

【力扣】907.子数组的最小值之和 文章目录 【力扣】907.子数组的最小值之和1. 题目介绍2. 解法2.1 方法一&#xff1a;单调栈2.2 方法二&#xff1a;动态规划 3. Danger参考 1. 题目介绍 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr …

ubuntu虚拟机设置跳不出来

前几天在使用ubuntu虚拟机的时候不知道哪一步出错了&#xff0c;导致右上角的设置按钮失效了&#xff0c;怎么点设置界面都出不来。 上网查阅后&#xff0c;有人说是显示器的原因&#xff0c;但是我点设置再点左上角activity并没有显示有设置窗口。 最后找到了解决办法&#xf…

【刷题笔记】分糖果||数组||暴力通过||符合思维方式||多案例分析

分发糖果 文章目录 分发糖果1 题目描述2 题目分析2.1 寻找波峰波谷2.2 从波底往波峰攀爬&#xff01;2.2 计算糖果 3 代码附录1 1 题目描述 https://leetcode.cn/problems/candy/ n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&…

Unity性能优化技巧篇

资源导入优化 随着项目越来越大&#xff0c;资源越来越多&#xff0c;有一套资源导入自动化设置很有必要&#xff0c;它不但可以减少你的工作量&#xff0c;也能更好的统一管理资源&#xff0c;保证资源的导入设置最优&#xff0c;还不会出错。 AssetPostprocessor 在Unity中…

python面向对象的特点:深入理解Python面向对象的关键特征

Python是一门支持面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;的高级编程语言。它具有许多强大的面向对象特性&#xff0c;其中包括&#xff1a; 封装继承多态 本文将结合具体实例来介绍这些特性。 1. 封装 封装是面向对象编程中的一个重…

Mo0n(月亮) MCGS触摸屏在野0day利用,强制卡死锁屏

项目:https://github.com/MartinxMax/Mo0n 后面还会不会在,我可就不知道了奥…还不收藏点赞关注 扫描存在漏洞的设备 #python3 Mo0n.py -scan 192.168.0.0/24 入侵锁屏 #python3 Mo0n.py -rhost 192.168.0.102 -lock 解锁 #python3 Mo0n.py -rhost 192.168.0.102 -unlock …

【Spring Boot】Swagger的常用注解

在Swagger的开发过程中&#xff0c;我们需要在Controller代码等处添加相应的注解&#xff0c;以便可以提高生成的接口文档的可读性为了解决这些问题&#xff0c;Swagger提供了很多的注解&#xff0c;通过这些注解&#xff0c;我们可以更好更清晰的描述我们的接口&#xff0c;包…

相机内存卡照片删除怎么恢复?没有备份可这样操作

在使用相机时&#xff0c;不小心删除了重要的照片可能是每位摄影爱好者的噩梦。然而&#xff0c;通过一些恢复方法&#xff0c;我们有机会挽救被删除的照片。本文将详细介绍相机内存卡照片删除恢复的方法。 图片来源于网络&#xff0c;如有侵权请告知 如果您误删了相机内存卡中…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的&#xff0c;可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Linux shell单双引号区别

shell单双引号区别&#xff1a; Shell脚本中很多时候都在用单引号或双引号来框住字符串&#xff0c;但是他们之间是存在区别的 避免踩坑记录… 单引号 单引号中的任何字符都没有特殊含义,即一些转义字符&#xff0c;$ 变量引用都会无效&#xff0c;它只把他们当作一个单纯的…

242. 有效的字母异位词

这篇文章会收录到 :算法通关村第十二关-白银挑战字符串经典题目-CSDN博客 242. 有效的字母异位词 描述 : 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t …

AI数字人播报的意义与未来发展空间

随着人工智能的快速发展&#xff0c;AI数字人播报成为了媒体和信息传播领域的一项创新技术。AI数字人播报利用虚拟形象和自然语言处理技术&#xff0c;为观众提供逼真的播报体验。本文将探讨AI数字人播报的意义以及未来的发展空间。 一、AI数字人播报的意义 提供个性化的播报体…

11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct 一、Go的面向对象1.1 说明 二、结构体2.1 结构体和结构体变量(实例)的区别和联系2.2 声明结构体 和 细节说明2.3 结构体在内存中的布局2.4 创建结构体和访问结构体的四种方式 在学习GO语言时&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节…

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C tar -zxvf x.tar.gz 解压提取 x.tar.gztar -zcvf x.tar.gz x.source 将 x.source 压缩打包为 x.tar.gztar -zxvf x.tar.gz --directory /tmp 解压提取 x.tar.gz 到 /tmp 文件夹 解压提取 x.tar.gz 到当前文件夹 横杆(减…

C语言错误处理之sterror和perror函数以及断言处理方式

目录 前言 sterror函数 perror函数 断言处理方式 前言 在错误处理一中&#xff0c;我们解释了C语言三种处理方式中的错误号处理方式&#xff0c;这一篇我们在基于上一篇的基础上加入了sterror函数与perror函数&#xff0c;以及断言处理方式的内容...... sterror函数 包含…