在C中帮助这个参差不齐的数组/子串程序?

所以,我有一个长度为200的不规则数组(称为名称)。数组中的每个指针指向一个不超过50个字符且没有空格的字符串。 我还有一个字符串,通过名为inname的用户输入给出,长度为50,inname将是存储在名称中的字符串之一。 我需要找到一种方法来遍历我的参差不齐的数组中的字符串,并找到最大子字符串与inname重叠的字符串,不包括inname本身,因为它将在文件中。 如果没有字符串有重叠,那么我们打印出“无建议”。 我一直在融化试图解决这个问题好几个小时了,有帮助吗? O :)所以基本上,程序在数组中找到最大子字符串与inname重叠的名称。 如果需要,将进行编辑以提供其他信息

这不会引导您找到重叠的最有效方法(动态编程是一种方式 – 还有其他疯狂的方法,如后缀树),但它应该让你开始:

首先,考虑如何在两个字符串对齐的开头找到重叠的长度。 例如,找到这两者之间最长的重叠:

programming ungrammatical 

在这种情况下,只有一个m重叠 – 长度为1。

然后考虑一下如何“移动”字符串并在它们以不同方式对齐时查找重叠。 (实际上不要改变字符串:只需改变循环它们的方式来比较它们。)这两者之间有什么重叠?

 programming ungrammatical 

考虑如何查看所有可能的对齐方式。 如果跟踪找到的最长的一个,则两个特定字符串之间的对齐时间最长。

之后,继续检查所有不同的字符串。 跟踪最匹配的那个,再次,一旦你看了所有这些,你就得到了你的答案。

您可能应该从确定infunc和单个字符串之间重叠大小的较小问题开始。

维基百科通过一些算法来解决最常见的子串问题 (包括伪代码!)