Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较字符串并复制差异_C#_String_Copy_Comparison - Fatal编程技术网

C# 比较字符串并复制差异

C# 比较字符串并复制差异,c#,string,copy,comparison,C#,String,Copy,Comparison,我有一个我控制的主字符串,称之为字符串A。然后我有另一个在我控制之外不断变化的字符串,称之为字符串B。我需要A以正确的顺序包含B中的所有内容 这是B的行为方式:开始时,新文本从上到下显示(如果您编写word文档,文本通常会以这种方式显示)。然后,在一个随机点,它包装和新的文本开始从顶部再次,覆盖什么是以前有 如果不是因为B在写入一定数量的字节后包装并从顶部开始,我可以用计时器在给定的时间间隔复制整个字符串。相反,我必须使用某种比较,从上到下比较B和A。当它在B中发现一个与a不同的字节时,它应该从

我有一个我控制的主字符串,称之为字符串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的进程,我被迫定期轮询它(使用计时器或快速循环)


Magnus算法的基本思想:

从A的末尾减去B的长度,相对于B的开头向后检查,从B中删除已经添加的内容,然后将其余内容添加到A中

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

示例:假设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中的
E
F
将与A中的
X
Y
不匹配,因此,首先将B中的
D
X
进行比较,然后再将
Y
等进行比较,直到到达A中的第二个
D
。此时,您将在A中找到
def
的匹配项,而B中的其余部分则是(
L M N O
)已经准备好添加到A中。

好吧,我已经编写了一个包含几千行代码的程序,可以从另一个进程的内存中读取大量内容,包括上面我称之为字符串B的内容。我尝试使用光标方法来解决它,但当文本包装到顶部时,它断了。我不确定如何进行比较方法。我查看了一下比较,但它只返回它是大还是小。我想我可以手动进行逐字节比较,但这似乎效率非常低,特别是当字符串变得非常大时。如果下一个字符串更改导致“flmno”,该怎么办?是否应忽略f(即如何处理重复项)?如果B变成了它已经存在的东西,比如在你的例子之后再次出现“abc”,会发生什么?是“abc”应该被附加到A之后,还是它已经被包含一次就足够了?然后如果B变成“defg”,会发生什么?换句话说,A中的“bcdef”是否同时包含“bcd”和“def”在B中,或者它们应该被算作两个不同的单词?好问题。f应该被包括在内,因为有时新添加的内容可能与以前相同。我同意sehe的观点,但是,如果错过一些阅读,A字符串就会损坏。克雅坦,非常感谢!我们来自同一个国家:)Jeg studerte paa NTNU。我们将尝试理解这一点,然后实施它。好的,很高兴能提供帮助!希望它能起作用。莱克·蒂尔!:)