Cracking the coding interview--Q1.5
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泡妞也要讲科学
- 下一篇: udhcp源码详解(四) 之租赁IP的管