比较字符串和复制差异

时间:2015-01-23 11:57:28

标签: c# string copy comparison

我有一个我控制的主字符串,称之为字符串A.然后我有另一个不断变化的字符串在我的控制之外,称之为字符串B.我需要A来包含B中所有的东西,在正确的顺序。

这就是B的行为方式:一开始,新文本从上到下显示(如果您编写word文档,通常会显示文本的方式)。然后,在一个随机点,它包装,新文本再次从顶部开始,覆盖之前的内容。

如果不是因为B包裹并且在写入一定数量的字节后从顶部开始,我可以用定时器以给定的间隔复制整个字符串。相反,我必须使用某种比较,将B从A从上到下进行比较。当它在B中发现一个与A不同的字节时,它应该从B中复制从该点到结尾的所有内容,并将其写入A的底部。

如果行为不清楚,我在下面输入了一个例子。任何代码 - 我如何能做到这一点的例子将非常感激。

String B: abc
String A: abc

String B: abcde
String A: abcde

String B: fgh
String A: abcdefgh

String B: fghijk
String A: abcdefghijk

etc...

只是为解决方案添加我自己的想法:我尝试使用游标方法来解决它,但是当文本被包装到顶部时它就崩溃了。我不知道如何做比较方法。我查看了String.Compare,但它只返回它是大还是小。我想我可以手动进行逐字节比较,但这似乎非常低效,特别是当字符串变得非常大时。

编辑(澄清):如果文字出现在B中,之前出现在B中,它仍应包含在A中。

编辑(澄清2):为了清楚,我无法控制包含字符串B的进程,我被迫定期轮询它(使用计时器或真正快速循环)。

马格努斯

1 个答案:

答案 0 :(得分:1)

算法的基本思路:

从A的末尾向后检查减去B的长度,而不是B的开头,从B中删除已添加的内容,然后将其余部分添加到A.

这应该将每个“单词”从B附加到A的末尾,减去恰好与A的最后部分重叠的B的任何部分(我希望我更多地解释了这个问题或更不正确)。

示例:说B是“DEFGH”,到目前为止,A已记录:“ABCDEF”。

比较算法将按如下方式迭代:

  D - - - -  // Only check D first, from end of A - length(B)
A B C D E F  // No match!

    D - - - -  // Move B ahead 1, still no match
A B C D E F 

      D - - - -  // Move B ahead 1, one match now.
A B C D E F 

结果:

  • 如果A的其余部分与B的相应字符匹配,那么您可以将B的其余部分附加到A.
  • 如果A的其余部分与B中的重叠字符不匹配,则再次启动算法,但这次从上一次匹配开始。

不匹配的例子:

      D E F L M N O ...
A B C D X Y D E F

此处,B中的EF与A中的XY不匹配,因此请将B中的D与{X进行比较。 1}},然后是Y等,直到您到达A中的第二个D。此时,您会在A中找到D E F的匹配项,而在B中找到其余的L M N O({ {1}})已准备好附加到A.