2011-05-17 51 views
0

所以,我有一个长度为200的不规则数组(称为名称)。数组中的每个指针都指向一个不超过50个字符且没有空格的字符串。我也有一个通过名为inname的用户输入给出的字符串,长度为50,inname将是存储在名称中的字符串之一。我需要找到一种方法来检查我的衣衫褴褛的数组中的字符串,并查找具有与inname重叠的最大子字符串的字符串,不包括inname本身,因为它将在文件中。如果没有字符串有重叠,那么我们打印出“不推荐”。 我一直在努力解决这个问题,现在好几个小时了,有帮助吗? O :) SO基本上,程序在数组中找到名称最大的子字符串与inname重叠。 将编辑以提供其他信息,如果您需要它C中这个不规则数组/子串程序的帮助?

+1

这功课吗? – 2011-05-17 03:33:41

+0

从某种意义上说,虽然它不是单纯的作业,所以它不像我为了成绩或其他任何东西而转向它。 – 2011-05-17 03:38:33

+0

你可以改变你的字符串数组的名称,而不是暗示它包含一个函数指针列表? – aroth 2011-05-17 03:40:31

回答

2

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

首先,想想你将如何找到重叠的长度与两个字符串的开始对齐。例如,发现这两者之间的最长重叠:

programming 
ungrammatical 

在这种情况下,只有一个m重叠 - 1.

的长度后来想想你会如何“换挡”的字符串,当他们排列不同时寻找重叠。 (不要实际改变字符串:只是改变你如何循环来比较它们。)这两者之间有什么重叠?

programming 
ungrammatical 

想想如何看待所有可能的路线。如果你跟踪的是你找到的最长的一条,那么你有两个特定字符串之间的最长对齐。

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