我被赋予了一项任务,可以制定一个程序来确定作为子串的独特回文的数量。独特的回文必须根据其长度和字母顺序排列。我能够确定子串回文,但我无法弄清楚如何按字母顺序排列它们。
我忘了提到我们只应该使用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'。
答案 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()
和==
完成。!=
。str[0] = '\0'
或检查第一个字符是否设置为NUL字节来检查字符串是否为空。