首页 > 解决方案 > C中的字符串缩写字符序列

问题描述

我需要编写一个函数,它接受像“abcdef”这样的字符串并将其转换为“af”,或将“589”转换为“5-9”,我可以使用 stdio.h 和 string.h 中的哪些函数?

标签: c

解决方案


您需要找到运行的开始和结束。如果您将每个字符都视为运行的一部分,则更容易,因此您的运行长度可能为 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
+-------+
|       |
+-------+

推荐阅读