2009-06-16 22 views
5

En mi proyecto asp.net, tengo dos cadenas (de hecho, se almacenan en un objeto Session, a continuación, hago un .ToString())C# - Mostrar las diferencias al comparar cadenas

Este proyecto forma parte de mis ejercicios gratuitos en japonés en mi sitio web (italiano solo por ahora, así que no voy a vincular/spam)

Por ahora hago un if (original == inputted.ToLower()), pero me gustaría comparar las cadenas y resaltar las diferencias en la pantalla

como este:

Original: hiroyashi
por el usuario escribió: Hiro yo shi

yo estaba pensando para comparar las dos cadenas y salvar las diferencias en otra variable, con las etiquetas HTML, y luego mostrarlo en un control literal ... pero ... si las diferencias son muchas, o la entrada es más corta ... ¿cómo hacer eso?

Parece que hay una gran cantidad de codificación ... ¿o no?

+0

La "y" es común, entonces ¿por qué se resalta como una diferencia? –

+0

Suponiendo que se trata de un error, este es un problema muy conocido que suele denominarse problema de subsecuencia común más larga; Estoy seguro de que puedes encontrar ejemplos de algoritmos que encuentran el LCS de cadenas. Aquí está mi artículo sobre cómo hacerlo con matrices en JScript, pero podrías adaptarlo fácilmente a secuencias de caracteres en C#: http://blogs.msdn.com/ericlippert/archive/2004/07/21/189974.aspx –

+0

ah, me olvidé de agregar otro elemento de dificultad: la Y se resalta porque muestro el SYLLABLE incorrecto en japonés –

Respuesta

3

Me parece recordar a alguien que pregunta esto no hace mucho tiempo, y esencialmente fueron señalados en los motores de diferencia.

Una búsqueda rápida en CodePlex nos lleva a: http://www.codeplex.com/site/search?projectSearchText=diff

puede ser digno de una caza a través de algunos de los que vienen para arriba - que puede ser capaz de conectar algo en su código existente?

Saludos, Terry

+1

pocas URL más: http://www.codeproject.com/KB/recipes/diffengine.aspx http: // www.mathertel.de/Diff/ http://www.menees.com/index.html –

+1

esto se ve perfecto para mi uso: http://www.mathertel.de/Diff/ ¡gracias! –

0

no estoy seguro de si esto sería de gran ayuda, pero esto es una manera que haría:

me gustaría utilizar un HashMap, y almacenar todas las palabras separadas por un espacio allí. Luego usando eso me gustaría mapear con el original.

Puede agregar etiquetas html o lo que sea si son diferentes.

Es probable que haya un problema de rendimiento aquí en un gran diccionario de palabras La codificación en sí misma no sería larga.

2

John Resig escribió javascript diff algorithm, pero ha eliminado la página explicando lo que hace desde su sitio. Todavía está disponible a través del google cache. Disculpas si el enlace es malo John. Debe hacer lo que quiera, alguien más lo tomó, lo modificó y colocó un artículo sobre él here - completo con test page

Cuestiones relacionadas