簡體   English   中英

從字符串中刪除空格,但不在開頭或結尾處刪除空格

[英]Remove spaces from a string, but not at the beginning or end

我試圖從C中的字符串中刪除空格,而不是從結尾,也不是從頭開始,只是字符串中的多個空格

例如

hello  everyone this     is a test

你好和每個人之間有兩個空格,其中有五個空格。 最終我想要從5中刪除2和4中的1個空格,因此每個間隙都有1個空格。 合理?

這就是我要做的事情:

  • 創建一個指針,將其指向元素1 char [0]的字符串。

  • 在字符串的長度上執行for循環

  • 然后我的邏輯是,如果我在[i]的指針是一個空格而我的指針在元素[i + 1]空間然后做某事

我不太清楚這里有什么好的解決方案,請記住我不會使用任何預先構建的功能。 有沒有人有任何想法?

一種方法是就地進行。 從頭到尾循環遍歷字符串。 存儲寫指針和讀指針。 每個循環寫指針和讀指針前進一個。 當您遇到正常的空間傳輸時,然后循環讀取指針每次遞增,直到找到非空格(或者顯然是字符串的結尾)。 不要忘記在末尾添加'\\ 0',現在你有了相同的字符串,沒有空格。

您是否可以使用額外的內存來創建字符串的副本,或者您需要進行適當的處​​理?

最簡單的方法是將內存平均分配給原始字符串的大小並復制其中的所有字符。 如果您遇到額外的空間,請不要復制它。

如果你需要在適當的位置進行,那么創建兩個指針。 一個指向正在讀取的字符,一個指向要復制的字符。 當您遇到額外的空間時,請調整“讀取”指針以指向下一個非空格字符。 將讀取字符指向的字符復制到寫入位置。 然后在復制字符后將讀指針前進到字符。 無論何時執行復制,寫指針都會遞增1。

例:

         write
          V
xxxx_xxxx__xxx
           ^
          Read

這里的一個難點是你不能輕易地從字符數組中刪除元素。 你當然可以創建一個函數來返回一個刪除了一個特定元素的char []。 另一個選擇是創建一個額外的數組,指示你應該保留哪些字符,然后再過一次char [],只復制你想要保留的字符。

這是基於Goz所說的,但我認為他有手指麻煩,因為我很確定他所描述的將剝離所有空間(不僅僅是每次運行的第二個開始)。

編輯 - 哎呀 - 關於Goz的錯誤,雖然“額外的”措辭只能正確地覆蓋兩個空格的運行。

編輯 - oops - 刪除預先寫好的解決方案......

但是,一般的想法是像其他人那樣使用“from”和“to”指針,但也要保留一些迭代到下一次迭代的一些信息(狀態),以便你可以決定是否在運行空間已經或沒有。

您可以對" "" "進行查找和替換,並繼續執行直到找不到更多匹配項。 效率低但合乎邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM