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

在C中查找字符串中的最短前缀,c,string,concatenation,C,String,Concatenation,我是C语言的新手,非常感谢您在代码方面的帮助。 我需要动态分配一个数组,检查字符串中哪个前缀最短,它的串联生成字符串,并打印它和它的长度 以下是一些输出示例: 对于“ababab”,输出应为长度为2的“ab” 对于“aaaa”,输出应为长度为1的“a” 对于“abcaabca”,输出应为长度为4的“abca” 对于“abcdefg”,输出应为长度为7的“abcdefg” 对于“ACACAC”,输出应为长度为7的“ACACAC” 我的问题是,我不知道如何构建应该为它提供的函数。字符串只包含同一个字

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

以下是一些输出示例:

  • 对于“ababab”,输出应为长度为2的“ab”
  • 对于“aaaa”,输出应为长度为1的“a”
  • 对于“abcaabca”,输出应为长度为4的“abca”
  • 对于“abcdefg”,输出应为长度为7的“abcdefg”
  • 对于“ACACAC”,输出应为长度为7的“ACACAC”
  • 我的问题是,我不知道如何构建应该为它提供的函数。字符串只包含同一个字母或所有字母彼此不同的情况是可以的,但我不知道如何处理所有其他情况

    我不能为这段代码使用另一个字符串,但我可以使用其他指针 来帮助我


    谢谢

    我不会写有效的代码,而是写想法本身

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


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

    我将不编写有效代码,而是编写idea本身

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


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

    这可以是非常简单的两个嵌套循环,外部循环为a for,从1到长度/2,内部循环为a while,使用在每一步中增加外部循环迭代变量值的指针。在循环内部,您可以使用strncmp()比较正确的子字符串,如果比较失败,则中断循环。如果所有比较都正常,那么您已经找到了“最短前缀”,因此可以中断(for)循环。for循环也可以通过跳过不是输入字符串长度除数的长度来优化

    这不需要制作一个或多个副本


    是的,我将让您实际编写代码。

    它可以非常简单,有两个嵌套循环,外部循环是a for,从1到长度/2,内部循环是a while,每一步使用一个指针,增加外部循环的迭代变量的值。在循环内部,您可以使用strncmp()比较正确的子字符串,如果比较失败,则中断循环。如果所有比较都正常,那么您已经找到了“最短前缀”,因此可以中断(for)循环。for循环也可以通过跳过不是输入字符串长度除数的长度来优化

    这不需要制作一个或多个副本


    是的,我将让您实际编写代码。

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

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

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


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

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

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

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


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

    您确实需要开始编写一些代码。你的问题,如贴出的,过于广泛,有效地要求我们为你写代码。这个网站不是为家庭作业。你真的需要开始写一些代码。你的问题,如贴出的,过于广泛,有效地要求我们为你写代码。这个网站不是为家庭作业。