簡體   English   中英

C中的字符串縮寫字符序列

[英]string abbreviation characters sequence in C

我需要編寫一個函數,它接受像“abcdef”這樣的字符串並將其轉換為“af”,或將“589”轉換為“5-9”,我可以使用 stdio.h 和 string.h 中的哪些函數?

您需要找到運行的開始和結束。 如果您將每個角色都視為運行的一部分,則更容易,因此您的運行長度可能為 1 或更長。

當你找到跑步​​的終點時,你需要根據跑步的長度做不同的事情。

  • 運行長度 = 1:打印運行的唯一字符。
  • 運行長度 = 2:打印運行的兩個字符。
  • 運行長度 = 3:打印運行的第一個和最后一個字符,中間有一個破折號。

考慮到這一點,我們可以使用以下算法:

  1. 創建一個指向字符串第一個字符的指針。
  2. 雖然尖頭字符不是 NUL,
    1. 打印尖頭字符。
    2. 將運行的長度設置為 0。
    3. 環形,
      1. 保存尖角字符。
      2. 增加指針。
      3. 增加運行的長度。
      4. 如果指向的字符是 NUL,
        1. 休息。
      5. 如果指向的字符不比保存的字符多一個,
        1. 休息。
    4. 如果運行的長度是 2+,
      1. 如果運行的長度是 3+,
        1. 打印一個破折號。
      2. 打印保存的字符。
  3. 打印換行符。

您應該在紙上運行上述算法,輸入"4abcz35xy" 執行此操作時,請跟蹤變量的當前值(指針、運行長度和保存的字符)。

         +---+---+---+---+---+---+---+---+---+---+---+
         |'4'|'a'|'b'|'c'|'z'|'3'|'4'|'5'|'x'|'y'| 0 |
         +---+---+---+---+---+---+---+---+---+---+---+
           ^
Pointer    |
+-------+  |
|     -----+
+-------+

Run length
+-------+
|       |
+-------+

Saved character
+-------+
|       |
+-------+

暫無
暫無

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

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