2009-06-16 3 views
5

Dans mon projet asp.net, j'ai deux cordes (en fait, ils sont stockés dans un objet Session, alors je fais un .ToString())C# - Afficher les différences lorsque l'on compare les chaînes

Ce projet fait partie de mes exercices gratuits de langue japonaise sur mon site (italien seulement pour l'instant, donc je ne vais pas lier/spam)

Pour l'instant, je fais un if (original == inputted.ToLower()), mais je voudrais comparer les chaînes et mettre en évidence les différences sur l'écran

comme ceci:

d'origine: hiroyashi
écrit par l'utilisateur: Hiro ans shi

je pensais de comparer les deux chaînes et enregistrer les différences dans une autre variable, avec des balises HTML, puis l'afficher sur un contrôle Literal ... mais ... si les différences sont nombreuses, ou l'entrée est plus courte ... comment faire cela?

Il semble qu'il soit nécessaire de coder énormément ... ou pas?

+0

Le "y" est commun, alors pourquoi est-il mis en évidence comme une différence? –

+0

En supposant qu'il s'agisse d'une erreur, il s'agit d'un problème très connu généralement appelé le plus long problème de sous-séquence commune; Je suis sûr que vous pouvez trouver des exemples d'algorithmes qui trouvent le LCS des chaînes. Voici mon article sur la façon de le faire avec des tableaux dans JScript, mais vous pouvez facilement l'adapter à des séquences de caractères en C#: http://blogs.msdn.com/ericlippert/archive/2004/07/21/189974.aspx –

+0

ah, j'ai oublié d'ajouter un autre élément de difficulté: le Y est mis en évidence parce que je montre le mauvais SYLLABLE en japonais –

Répondre

3

Je me souviens de quelqu'un qui me l'a demandé il n'y a pas si longtemps, et essentiellement, ils m'ont montré des moteurs de différence.

Une recherche rapide sur CodePlex soulève: http://www.codeplex.com/site/search?projectSearchText=diff

vaut peut-être la chasse par certains de ceux qui se présentent - vous pourriez être en mesure de brancher quelque chose dans votre code existant?

Cheers, Terry

+1

quelques URL: http://www.codeproject.com/KB/recipes/diffengine.aspx http: // www.mathertel.de/Diff/ http://www.menees.com/index.html –

+1

cela semble parfait pour mon utilisation: http://www.mathertel.de/Diff/ merci! –

0

Je ne suis pas sûr que cela serait utile, mais cela est une façon que je ferais:

Je voudrais utiliser un hashmap et stocker tous les mots séparés par un espace là-bas. Ensuite, en utilisant ce que je voudrais mapper avec l'original.

Vous pouvez ajouter des balises HTML ou autres si elles sont différentes.

Il y a forcément un problème de performance ici sur un grand dictionnaire de mots Le codage lui-même ne serait pas long cependant.

2

John Resig a écrit un javascript diff algorithm, mais il a supprimé la page expliquant ce qu'il fait de son site. Il est toujours disponible via le google cache. Excuses si la liaison est mauvaise John. Il devrait faire ce que vous voulez, quelqu'un d'autre l'a pris, modifié et mis un article à ce sujet here - complet avec un test page

Questions connexes