C# - Show the differences when comparing strings

Go To StackoverFlow.com


In my asp.net project, I have two strings (actually, they are stored in a Session object, then i do a .ToString() )

This project is part of my free Japanese language exercises on my website (Italian only for now, so i won't link/spam)

For now i do an if (original == inputted.ToLower()) , but I would like to compare the strings and highlight the differences on the screen

like this:

original: hiroyashi
wrote by user: hiroyoshi

i was thinking to compare the two strings and save the differences in another variable, with HTML tags, and then show it on a Literal control... but... if the differences are many, or the input is shorter... how to do that?

It looks there is the needing of an huge amount of coding... or not?

2009-06-16 10:15
by Magnetic_dud
The "y" is in common, so why is it highlighted as a difference - Eric Lippert 2009-06-16 15:13
Assuming that's an error, this is a very well-known problem usually called the Longest Common Subsequence problem; I'm sure you can find examples of algorithms that find the LCS of strings. Here's my article on how to do it with arrays in JScript, but you could pretty easily adapt it to sequences of characters in C#: http://blogs.msdn.com/ericlippert/archive/2004/07/21/189974.asp - Eric Lippert 2009-06-16 15:14
ah, i forgot to add another element of difficulty: the Y is highlighted because i show the wrong SYLLABLE in japanes - Magnetic_dud 2009-06-16 20:54
OK, if you can come up with two arrays of syllables, then you can use the LCS algorithm to figure out which syllables are in common and which are not - Eric Lippert 2009-06-16 23:07
thank you for you comment, it pushed me in the right way :)

èé coding in progress è - Magnetic_dud 2009-06-17 10:26


I seem to remember someone asking this not too long ago, and essentially they were pointed at difference engines.

A quick search on codeplex brings up: http://www.codeplex.com/site/search?projectSearchText=diff

May be worth a hunt through some of those that come up - you may be able to plug something into your existing code?

Cheers, Terry

2009-06-16 10:20
by Terry_Brown
few more URLs: http://www.codeproject.com/KB/recipes/diffengine.aspx http://www.mathertel.de/Diff/ http://www.menees.com/index.htm - Terry_Brown 2009-06-16 10:24
this looks perfect for my use: http://www.mathertel.de/Diff/

thank you - Magnetic_dud 2009-06-16 10:44


John Resig wrote a javascript diff algorithm, but he's removed the page explaining what it does from his site. It's still available through the google cache though. Apologies if linking that is bad John. It should do what you want, someone else took it, tweaked it and put an article up about it here - complete with a test page

2009-06-16 10:50
by Dan F


I am not sure if this would be helpful, but this is a way I would do:

I would use a hashmap, and store all words seperate by space there. Then using that I would map with the original.

You can add html tags or whatever if they are different.

There is bound to be a performance issue here on a large dictionary of words The coding itself would not be long though.

2009-06-16 10:32
by waqasahmed