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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Cracking the coding interview--Q1.5

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Cracking the coding interview--Q1.5 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

原文:

Write a method to replace all spaces in a string with ‘%20’.

譯文:

寫一個函數,把字符串中所有的空格替換為%20 。

解答

簡單題。先遍歷一次字符串,得到空格個數,進而得到將空格轉換成%20后的串長度 (每個空格替換為%20需要增加2個字符,x個空格增加2x個字符)。 然后從后向前依次對空格進行替換,非空格原樣拷貝。如果原串有足夠大的空間, 則替換過程直接在原串上進行, 因為從后向前替換的過程中,新串用到的空間一定是舊串不需要的空間,看圖示:

舊字符串:i am hawstein 舊串索引: p 新字符串:i%20am%20hawstein 新串索引: q

如果原串的空間不夠大,或是就直接是字符串長度加1(不要忘了'\0'), 那么就新開一個串來保存替換后的結果。

代碼如下:

#include <iostream> #include <cstring> using namespace std;char* replace1(char *c){if(c == NULL) return NULL;int len = strlen(c);if(len == 0) return NULL;int cnt = 0;for(int i=0; i<len; ++i){if(c[i] == ' ')++cnt;}char *cc = new char[len+2*cnt+1];int p = 0;for(int i=0; i<len; ++i){if(c[i] == ' '){cc[p] = '%';cc[p+1] = '2';cc[p+2] = '0';p += 3;}else{cc[p] = c[i];++p;}}cc[p] = '\0';return cc; }void replace2(char *c){if(c == NULL) return;int len = strlen(c);if(len == 0) return;int cnt = 0;for(int i=0; i<len; ++i){if(c[i] == ' ')++cnt;}int p = len + 2*cnt;c[p--] = '\0';//the space must be allocated first.for(int i=len-1; i>=0; --i){if(c[i] == ' '){c[p] = '0';c[p-1] = '2';c[p-2] = '%';p -= 3;}else{c[p] = c[i];--p;}} } int main(){const int len = 100;char c[len] = "";cout<<replace1(c)<<endl;replace2(c);cout<<c<<endl;return 0; }

?

總結

以上是生活随笔為你收集整理的Cracking the coding interview--Q1.5的全部內容,希望文章能夠幫你解決所遇到的問題。

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