C 中的替換空格

2021-06-27 23:58:55 字數 2118 閱讀 2376

分析:我們從字串的後面開始複製和替換。首先準備兩個指標,p1和p2。p1指向原始字串的末尾,而p2指向替換之後的字串的末尾(如圖(a)所示)。接下來我們向前移動指標p1,逐個把它指向的字元複製到p2指向的位置,直到碰到第乙個空格為止。此時字串包含如圖(b)所示,灰色背景的區域是做了字元拷貝(移動)的區域。碰到第乙個空格之後,把pl向前移動1格,在p2之前插入字串"%20"。由於"%20"的長度為3,同時也要把p2向前移動3格如圖(c)所示。

我們接著向前複製,直到到碰到第二個空格(如圖2.4(d)所示)。和上次一樣,我們再把p1向前移動1格,並把p2向前移動3格插入"%20"(如圖2.4(e)所示)。此時p1和p2指向同一位置,表明所有空格都已經替換完畢。   從上面的分析我們可以看出,所有的字元都只複製(移動)一次,因此這個演算法的時間效率是o(n),效率比較高。

注:圖中帶有陰影的區域表示被移動的字元。

(a)把第乙個指標指向原字串的末尾,把第二個指標指向替換之後的字串的末尾。

(b)依次複製字串的內容,直至第乙個指標碰到第乙個空格。

(c)把倒數第乙個空格

替換成"%20",接著,把第乙個指標向前移動1格,把第二個指標向前移動3格。

(d)依次向前複製字串中的字元,直至碰到空格。

(e)替換字串中的倒數第二個空格,接著,把第乙個指標向前移動1格,把第二個指標向前移動3格。

在面試的過程中,我們也可以和前面的分析一樣,畫一兩個示意圖,解釋自己的思路,這樣既能幫助我們理清思路,也能使我們和面試官的交流變得更加高效。在面試官肯定我們的思路之後,就可以開始寫**了。下面是參考**:

//length為字元陣列string的總容量

void replaceblank(char str,int length)

//newlength為把空格替換成'%20'之後的長度

int newlength=originallength + numberofblank*2;

if(newlength>length)

return;

int indexoforiginal=originallength;

int indexofnew=newlength;

while (indexoforiginal>=0 && indexofnew>indexoforiginal)

else

--indexoforiginal;

}}

測試用例:

1)輸入的字串中

包含空格(空格位於字串的

最前面,空格位於字串的

最後面,空格位於字串的

中間,字串中有

連續多個空格)。

2)輸入的字串中

沒有空格。

3)特殊輸入測試(字串是個null指標、字串是個空字串、字串只有乙個空格字元、字串中只有連續多個空格)。

//測試**:

void test(char* testname, char string, int length, char expected)

// 空格在句子中間

void test1()

// 空格在句子開頭

void test2()

// 空格在句子末尾

void test3()

// 連續有兩個空格

void test4()

// 傳入null

void test5()

// 傳入內容為空的字串

void test6()

//傳入內容為乙個空格的字串

void test7()

// 傳入的字串沒有空格

void test8()

// 傳入的字串全是空格

void test9()

//主函式

int _tmain(int argc, _tchar* argv)

效果如下:

字串中的替換空格

題目 把字串中的每個空格替換成 20 思路 直觀的做法是從頭到尾掃瞄字串,遇到空格就做替換,然而由於將乙個字元替換成3個字元,我們必須將空格後面的所有字元都後移兩個位元組。這樣沒次遇到空格,都會移動字元。對於這種問題,當字串 或陣列 長度變大,從前往後操作時移動次數多時,可以考慮從後往前操作。ps ...

替換字串中的空格

這是乙個關於字串的題目,解決這個問題有如下方法。最直觀的方法,利用輔助空間,開始遍歷原字串,是空格則在輔助空間中用 20 字串替代,不是則直接複製到輔助空間中。此方法時間複雜度為o n 空間複雜度為o n 因為需要遍歷原字串,所以時間複雜度不能縮減。如果考慮空間複雜度為o 1 有一種從空間複雜度概念...

替換字串中的空格

替換字串中的空格的方法有很多,在這裡我們實現一種時間複雜度與空間複雜度都為o n 的方法,使用c 語言實現。例如字串talk is cheap show me the code,我們要將其替換為talk is cheap show me the code,並且列印到螢幕上。方 述 定義乙個字元型指標...