消除字串空格

2021-07-05 03:28:58 字數 1449 閱讀 6909

這是自己面試時碰到的乙個題目,題目大意如下:

去掉乙個字串的首尾空格,單詞之間的空格,如果有多個則合併為乙個,例如:「  i love   china            and i  love you   」,則輸出結果為:"i love china and i love you"。

先說一下自己的思路:

1、字串首尾的空格比較容易,直接掃瞄乙個去掉乙個。

2、字串中間的空格,需要分割出單詞。然後這裡有兩種方法,一是將分割出的單詞自己加上空格然後連線起來即可,一種是邊分割邊刪除多餘空格。下面的**採用的是第二種方式。

貼上原始碼:

#include "stdafx.h"

#include #include char* formatstring(char *sourcestring)

for (int i = strlen(p)-1; i >= 0; i--)//去掉尾部空格,將空格填充'\0'即可

//去除字元間的空格

char* temp = p;

while (*temp != '\0')

else

index = index - count;

temp = temp - count;

count = 0;

} if (count==1)//只有乙個空格就不去掉

} if (in == 0) }

temp++;

}return p;

}int _tmain(int argc, _tchar* argv)

下面是執行結果圖:

下面的演算法更加簡潔,思路如下:

採用雙下標迴圈,如果遇到單詞則將其移動到新字串(向前移動),遇到空格則保留第乙個,剩餘的忽略掉。**如下,注釋應該夠清晰了吧:

#include "stdafx.h"

#include #include char* formatstring(char *str)

else

in = 0; //出單詞區,其餘空格都忽略

} }//處理字串末尾空格

if (*(pstr + j - 1) = ' ') //末尾有空格則填充'\0'

*(pstr + j - 1) = '\0';

else //末尾無空格

*(pstr + j) = '\0';

return pstr;

}int _tmain(int argc, _tchar* argv)

上面兩個演算法都沒有直接對引數str進行操作,而是將其拷貝至新的記憶體區,然後進行操作。原因很簡單,如果傳遞的引數是字串常量,則直接對引數進行處理是不行的,會報錯(字串常量儲存在靜態儲存區,不能進行寫操作)。

字串消除

給定乙個字串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外乙個字母替換它,如 有ab或ba連續出現,你把它們替換為字母c 有ac或ca連續出現時,你可以把它們替換為字母b 有bc或cb 連續出現時,你可以把它們替換為字母a。你可以不斷反覆按照這個規則進行替換,你的目標是...

字串消除

題目詳情 給定乙個字串,僅由a,b,c 3種小寫字母組成。當出現連續兩個不同的字母時,你可以用另外乙個字母替換它,如 有ab或ba連續出現,你把它們替換為字母c 有ac或ca連續出現時,你可以把它們替換為字母b 有bc或cb 連續出現時,你可以把它們替換為字母a。你可以不斷反覆按照這個規則進行替換,...

字串消除

小hi最近在玩乙個字元消除遊戲。給定乙個只包含大寫字母 abc 的字串s,消除過程是如下進行的 1 如果s包含長度超過1的由相同字母組成的子串,那麼這些子串會被同時消除,餘下的子串拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 a...