如何在C中压缩字符串的元素

如何在C中压缩字符串的元素,c,arrays,string,C,Arrays,String,我需要一些帮助。我有一个程序,它将元素存储在字符串中,如下所示: “D,C,D,C,D,C,C,D,C,C,C,C,D,C” 我想压缩这些元素并将其打印到sreen,如下所示: (DC)3C(CDC)2 其中(DC)3表示程序压缩了字符串“dcdc”,这意味着DC将重复3次,并且知道()中的每组元素最多只能有3个元素 到目前为止,我只拥有与相同类型的紧凑元素 “dddcc” 进入: D3CDC2 我们将非常感谢您的任何帮助。让我们来探讨一下您正在尝试用一项更简单的任务做什么。在以下字符串中折叠D

我需要一些帮助。我有一个程序,它将元素存储在字符串中,如下所示:

“D,C,D,C,D,C,C,D,C,C,C,C,D,C”

我想压缩这些元素并将其打印到sreen,如下所示:

(DC)3C(CDC)2

其中(DC)3表示程序压缩了字符串“dcdc”,这意味着DC将重复3次,并且知道()中的每组元素最多只能有3个元素

到目前为止,我只拥有与相同类型的紧凑元素

“dddcc”

进入:

D3CDC2


我们将非常感谢您的任何帮助。

让我们来探讨一下您正在尝试用一项更简单的任务做什么。在以下字符串中折叠
DC
CDC
的任何实例:

[D,C,D,C,D,C,C,C,D,C,C,D,C]
由于
DC
出现在
CDC
中,因此我们应该首先执行较长的字符串。从第一个字符开始,请参见模式的位置
CDC
开始:

DCDCDCCCDCCDC
 ^     ^  ^
折叠其中每一项会导致:

D(CDCx1)DCC(CDCx2)
DCDCDCCCDCCDC
^ ^ ^   ^  ^
现在,检查
DC

D(CDCx1)(DCx1)C(CDCx2)
哦!这并没有导致您的示例输出!如果我们按另一个顺序搜索呢?标记每个
DC
会导致:

D(CDCx1)DCC(CDCx2)
DCDCDCCCDCCDC
^ ^ ^   ^  ^
可分为:

(DCx3)CC(DCx1)C(DCx1)
嗯,这也不会导致你的输出

所以,如果我们尝试不同的策略。。。让我们从头开始,尽可能快地匹配任何模式:

DCDCDCCCDCCDC
^
我们能比得上CDC吗?不,华盛顿怎么样?对!

(DCx1)DCDCCCDCCDC
      ^
从第一次更换后开始,我们进行相同的测试。疾病控制中心?不,华盛顿?对!

(DCx2)DCCCDCCDC
      ^
(DCx3)CCDCCDC
      ^
再说一次:疾病预防控制中心?不,华盛顿?对!

(DCx2)DCCCDCCDC
      ^
(DCx3)CCDCCDC
      ^
疾病控制中心?不,华盛顿?否。跳到下一个字符

(DCx3)CCDCCDC
       ^
疾病控制中心?对!

(DCx3)C(CDCx1)CDC
              ^
(DCx3)C(CDCx2)
              ^
疾病控制中心?对!

(DCx3)C(CDCx1)CDC
              ^
(DCx3)C(CDCx2)
              ^
我们已经到达了文本的末尾,而且,输出与预期值匹配。因此,要将其扩展到完整的算法,您需要完整的可能子集列表:CCC、CCD、CDC、CDD、DCC、DCD、DDC、DDD、CC、CD等


祝你好运

请试着解释一下你是如何从第一段到第二段的。它不必在代码中,但现在,您正在显示原始字符串中未包含的诸如“3C”和“2”之类的内容。这些数字是从哪里来的?@evanmcdonnal我想是(模式1)x3,C,(模式2)X2我想他可能正在尝试执行一种基本形式的run-legnth编码。@AK4749是的,一个可怜的人的正则表达式。谢谢@Bill,这可能会有帮助,我必须涵盖所有的可能性,但它会带来正确的解决方案。谢谢你的理解。