C# - 比较字符串时如何展示不同之处

5
在我的asp.net项目中,我有两个字符串(实际上它们存储在Session对象中,然后我执行.ToString()操作)。
这个项目是我网站上免费日语练习的一部分(目前仅限于意大利语,所以我不会链接/垃圾邮件)。
现在我做一个if (original == inputted.ToLower()),但我想比较这两个字符串并在屏幕上突出显示差异。
像这样:
原始:hiroyashi 用户输入:hiroyoshi
我想比较这两个字符串并将差异保存在另一个带有HTML标记的变量中,然后在Literal控件上显示它...但是...如果差异很多,或者输入较短...怎么办?
看起来需要大量编码...还是不需要?

“y”是相同的,为什么它被突出显示为不同之处? - Eric Lippert
假设这是一个错误,这通常被称为最长公共子序列问题,这是一个非常著名的问题; 我相信你可以找到查找字符串LCS的算法示例。 这是我关于如何在JScript中使用数组执行此操作的文章,但是您可以很容易地将其调整为C#中的字符序列:http://blogs.msdn.com/ericlippert/archive/2004/07/21/189974.aspx - Eric Lippert
啊,我忘记增加另一个难点了:Y是突出显示的,因为我在日语中显示了错误的音节。 - Magnetic_dud
好的,如果你能想出两个音节数组,那么你可以使用LCS算法来找出哪些音节是共同的,哪些不是。 - Eric Lippert
谢谢您的评论,它让我朝着正确的方向努力 :)正在编码中 è_é - Magnetic_dud
3个回答

3

我记得不久前有人问过这个问题,基本上他们被指向了差分引擎。

在codeplex上快速搜索可以找到: http://www.codeplex.com/site/search?projectSearchText=diff

可能值得浏览一下那些出现的内容,你也许能够将某些东西插入到你现有的代码中?

谢谢, Terry


2
更多的网址:http://www.codeproject.com/KB/recipes/diffengine.aspx http://www.mathertel.de/Diff/ http://www.menees.com/index.html - Terry_Brown

2
John Resig写了一个JavaScript差异算法,但他已经从他的网站上删除了解释它所做的页面。不过,你仍然可以通过Google缓存获得它。如果链接这个是不好的John,那我道歉。它应该能够满足你的需求,其他人已经拿走了它,进行了调整,并在这里发布了一篇文章,其中包括一个测试页面

0

我不确定这是否有帮助,但这是我会做的一种方式:

我会使用哈希表,将所有单词按空格分开存储在其中。 然后使用它来映射原始文本。

如果它们不同,您可以添加HTML标记或其他标记。

在大型单词字典上肯定会存在性能问题, 但编码本身并不长。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接