日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

请实现一个函数,将字符串中的空格替换成“%20”

發布時間:2024/10/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请实现一个函数,将字符串中的空格替换成“%20” 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、傳統做法

從開始位置向后遍歷,如果發現空格,則挪動后面的字符串騰出 2 個字符的空間,寫入“%20”,直至到字符串末尾。

(灰色部分是每次要挪動的字符)

這種方法非常直觀,但是性能較差。假設字符串長度為 n,其中空格數量為 m,那么時間復雜度大概為 O(m*n),簡化為 m = n,那么時間復雜度就變成了 O(n^2) 。

二、高性能做法

為了提高性能,需要盡可能的減少后面字符不必要的挪動次數,即:最后一次就能將后面的字符挪動到最終的位置上,方法就是從后面開始遍歷字符串。

為了達到上述目的,需要提前知道空格替換完之后最終的字符串大小。所以開始遍歷一遍字符串,假設字符串長度為 n,空格數量為 m,那么空格替換完之后的字符串長度為 len = n + m * 2 。

下一步就是開始搬運字符和替換空格的過程:

假設有兩個指針分別指向了原始字符串末尾位置(p1)和最終字符串的末尾位置(p2)。首先要從后向前遍歷,查看 p1 指向的字符是否是空格,如果不是的話就將該字符挪到 p2 位置上,由此類推,p1 不斷向字符開始位置遍歷,直至結束。

上述方法字符串每個字符挪動一次就行了,故時間復雜度為 O(n) 。

三、測試

#include <iostream> #include <string.h>void Print(const char *const p); void ReplayBlank(char *const data, const size_t &len); void test(const char *const data, const size_t &len);int main(int argc, char *argv[]) {test("I love China", 13);test(" I love China ", 15);test("I_love_China", 13);test("", 0);test(" ", 1);return 0; }void test(const char *const data, const size_t &len) {char *src = new char[len * 2]();memcpy(src, data, strlen(data));Print(src);ReplayBlank(src, strlen(src) + 1);Print(src);std::cout << "----------------------" << std::endl;delete []src;return; }void Print(const char *const p) {if (p == nullptr)return;std::cout << p << std::endl;return; }void ReplayBlank(char *const data, const size_t &len) {if (data == nullptr || len == 0)return;size_t blank_count = 0;int i = 0;while (i < len){if (data[i] == ' ')blank_count++;i++;}if (blank_count == 0)return;size_t len_all = len + blank_count * 2;char *p1 = data + len;char *p2 = data + len_all;for (i = 0; i <= len; ++i){if (*(p1 - i) != ' '){*p2 = *(p1 - i);p2--;}else{*(p2--) = '0';*(p2--) = '2';*(p2--) = '%';}}return; }

結果:

I love China I%20love%20China ----------------------I love China %20I%20love%20China%20 ---------------------- I_love_China I_love_China --------------------------------------------%20 ----------------------

注意,代碼中要展現出判空、空字符串、沒有空格、全是空格等情況的處理。

?

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的请实现一个函数,将字符串中的空格替换成“%20”的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。