在C中查找字符串中的最短前缀

时间:2017-01-07 13:48:11

标签: c string concatenation

我是C新手,非常感谢您在代码中的帮助。 我需要动态分配一个数组并检查字符串中的哪个前缀最短,它的串联构建字符串,并打印它和它的长度。

以下是输出的几个示例:

  1. for" ababab",输出应为:" ab"长度为2
  2. for" aaaa",输出应为:" a"长度为1
  3. for" abcaabca",输出应为:" abca"长度为4
  4. for" abcdefg",输出应为:" abcdefg"长度为7
  5. for" acacaac"输出应该是" acacaac"长度为7
  6. 我的问题是我不知道如何构建应该适用的功能。字符串只包含相同字母或所有字母彼此不同的情况都很好,但我不知道如何处理所有其他情况。

    我不能为此代码使用其他字符串,但我可以使用其他指针 帮助我。

    由于

3 个答案:

答案 0 :(得分:1)

我不会写出有效的代码,而是自己的想法。

首先,这个"前缀"你的长度是一个长度的除数。因此,如果前缀的长度i没有除以字符串的长度n,那么应该跳过它。

要检查长度i是否有效,则需要比较位置j和j + i的字符,以获取j的所有可能值。

答案 1 :(得分:1)

它可以非常简单,两个嵌套循环,外部一个是for,从1到length / 2,内部a,使用指针在每一步中增加外部迭代变量的值环。在循环内部,您可以使用strncmp()来比较正确的子字符串,并在比较失败时中断循环。如果所有比较都没问题,你就找到了#34;最短的前缀",这样就可以打破(for)循环。通过跳过不是输入字符串长度的除数的长度,也可以优化for循环。

这并不需要复制或复制。

是的,我会让你真正写下代码。

答案 2 :(得分:0)

你说你不能使用另一个字符串,希望你可以使用一个小的临时布尔数组来计算字符串中不同字符的数量。

1-使用布尔数组查找字符串中不同字符的数量。设这个数字为x。

2-检查前x个字符是否构成前缀。 (检查每个指针位置p与p + x,p + 2x等)。如果不成功,则最短的前缀是整个字符串。

在两者之间,您可以通过快速检查x 是否字符串的长度来加快速度。