gpt4 book ai didi

c - 一个 Cruncher 程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:50:04 25 4
gpt4 key购买 nike

我正在编写一个程序,我必须从 1 开始按照长度递增的顺序删除所有连续重复出现的子字符串。

例如,如果字符串是“abcabeccced”。删除长度为 1 的重复子串后:"abcababceccced"--> "abcababceced"(删除 2 个 'c')删除长度为 2 的重复子串后:"abcababceced"--> "abcabceced"(子串“ab”被删除)等等……

有人可以为此建议一个有效的代码,甚至是如何做的想法吗?

最佳答案

这是未经测试的伪代码,但您希望执行如下操作:

 void crunch(char *str)
{
for (n=1; n<10; n++)
{
ptr = str;
while (*ptr != '\0')
{
while (strncmp(ptr, ptr + n, n) == 0)
strcpy(ptr, ptr + n);
ptr++;
}
}
}

它可以优化得更好,但是,我选择优化伪代码来理解这个想法。这段代码的问题是:

  • 效率很低,因为它使用了 strcpy(一对 src、dst 指针会更好)
  • ptr 循环到达字符串的末尾,我们可以提前中止
  • 那里有 10 个硬编码限制,这可以推广
  • 此函数会覆盖 str 指向的内存,而复制可能会更好
  • (编辑)将内部 if 更改为内部 while 以“压缩”重复序列。

关于c - 一个 Cruncher 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8953165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com