C中的Palindrome子串分拣机

时间:2014-11-20 02:58:00

标签: c string palindrome

我被赋予了一项任务,可以制定一个程序来确定作为子串的独特回文的数量。独特的回文必须根据其长度和字母顺序排列。我能够确定子串回文,但我无法弄清楚如何按字母顺序排列它们。

我忘了提到我们只应该使用stdio.h

当您输入'amadama'时,这就是它应该是什么样的: 'amadama'中的6个独特的回文是'a','d','m','ada','madam'和'amadama'。 但我的程序这样做: 'amadama'中的12个独特的回文是'a','m','ama','a','d','ada','madam','amadama','a','m',' AMA”, 'A'。

1 个答案:

答案 0 :(得分:1)

你的"应该是"列表似乎不包括ama,尽管它似乎符合标准。您应该向教育工作者澄清这一点。

澄清之后,您需要采取的下一步是从输出中删除重复项。你的输出实际上似乎是正确的,但事实上它仍然有重复的值,所以我从你到目前为止开始。

鉴于它的课堂作业,我不会给你完整的解决方案,但我说一个选项是对单词进行排序(例如{{1} })然后以删除重复项的方式输出它们。

以下伪代码是使用排序数组执行此操作的一种方法:

qsort

如果你遇到麻烦让output word[0] for index = 1 to word.numelements - 1: if word[index] != word[index - 1]: output word[index] 表现得像你期望的那样(很多人都这么做),另一种选择就是用以下方法删除重复项:

qsort

然后输出避免设置为空字符串的那些:

for index1 = 0 to word.numelements - 2:
    for index2 = index1 + 1 to word.numelements - 1:
        if word[index1] == word[index2]:
            word[index2] = ""

请注意,我要将您的伪代码转换为C语言,但您应该记住以下几点:

  • 字符串比较应使用for index = 0 to word.numelements - 1: if word[index] != "": output word[index] 而非strcmp()==完成。
  • 您只需将第一个字符设置为NUL字节即可将字符串设置为空:!=
  • 您可以使用str[0] = '\0'或检查第一个字符是否设置为NUL字节来检查字符串是否为空。