繁体   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