【问题标题】:Help with this ragged array/substring program in C?在 C 中帮助这个参差不齐的数组/子字符串程序?
【发布时间】:2011-08-26 22:11:37
【问题描述】:

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

【问题讨论】:

  • 从某种意义上说,这不是 uni 的家庭作业,所以它不像我要上交这个成绩或任何东西。
  • 您能否将字符串数组的名称更改为不包含函数指针列表的名称?
  • 不过,这里通常有很好的礼仪来标记它,这样我们就知道如何才能最好地帮助您。你有什么问题?循环数组?遍历字符串?寻找共同的子串?
  • 啊,那我很抱歉。我在查找公共子字符串部分时遇到问题
  • 这个问题是需要在字符串中间重叠,还是从头开始?

标签: c arrays substring


【解决方案1】:

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

维基百科介绍了一些用于解决longest common substring problem 的算法(包括伪代码!)

【讨论】:

    【解决方案2】:

    这不会引导您找到寻找重叠的最有效方法(动态编程是一种方法——还有其他疯狂的方法,例如后缀树),但它应该可以帮助您入门:

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

    programming
    ungrammatical
    

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

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

    programming
     ungrammatical
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 2010-11-21
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多