• 【九章斩题录】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++

    1. class Solution {
    2. public:
    3. string replaceSpaces(string S, int length) {
    4. }
    5. };


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

    💬 代码演示:

    1. class Solution {
    2. public:
    3. string replaceSpaces(string S, int length) {
    4. string ans;
    5. for (int i = 0; i < length; i++) {
    6. if (S[i] == ' ') {
    7. ans += "%20";
    8. } else {
    9. ans += S[i];
    10. }
    11. }
    12. return ans;
    13. }
    14. };

    什么是 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"

    💭 代码演示:

    1. #include
    2. #include
    3. #include // 用于判断字符的函数
    4. // 函数将字符编码为URL安全格式
    5. std::string urlEncode(const std::string& input) {
    6. std::string encoded;
    7. for (char c : input) {
    8. if (std::isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
    9. // 如果是字母、数字、连字符、下划线、点或波浪线,保留不变
    10. encoded += c;
    11. } else {
    12. // 否则,将字符编码为百分号编码
    13. char buffer[4];
    14. snprintf(buffer, sizeof(buffer), "%%%02X", static_cast<unsigned char>(c));
    15. encoded += buffer;
    16. }
    17. }
    18. return encoded;
    19. }
    20. int main() {
    21. std::string input = "Hello World! How are you?";
    22. std::string encoded = urlEncode(input);
    23. std::cout << "Original: " << input << std::endl;
    24. std::cout << "Encoded: " << encoded << std::endl;
    25. return 0;
    26. }

    🚩 运行结果如下:

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

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

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

    📜 参考资料 

    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.

  • 相关阅读:
    cnpm安装步骤
    【精通Java】集合类体系之List集合
    常见排序算法及其使用场景
    消息队列协议
    linux-进程管理
    【MySQL】 MySQL的增删改查(进阶)--贰
    LeetCode-1678. 设计 Goal 解析器【字符串】
    设备树属性获取,通过键获取值的相关函数实验
    牛客网刷题篇
    FOC控制算法
  • 原文地址:https://blog.csdn.net/weixin_50502862/article/details/132897401