2009-06-16 18 views
5

Nel mio progetto asp.net, ho due corde (in realtà, sono immagazzinate in un oggetto di sessione, quindi faccio un .ToString())C# - Mostra le differenze quando si confrontano le stringhe

Questo progetto fa parte dei miei esercizi di lingua giapponese gratuiti sul mio sito web (solo italiano per ora, quindi non collegherò/spam)

Per ora faccio un if (original == inputted.ToLower()), ma mi piacerebbe confrontare le stringhe ed evidenziare le differenze sullo schermo

come questo:

originale: hiroyashi
scritto dall'utente: Hiro yo shi

stavo pensando per confrontare le due stringhe e salvare le differenze di un'altra variabile, con tag HTML, e poi mostrare su un controllo Literal ... ma ... se le differenze sono molte, o l'input è più corto ... come farlo?

Sembra che ci sia bisogno di un'enorme quantità di codice ... o no?

+0

La "y" è in comune, quindi perché è evidenziato come una differenza? –

+0

Supponendo che si tratti di un errore, si tratta di un problema molto noto, solitamente chiamato il problema più lungo di secondaria importanza; Sono sicuro che puoi trovare esempi di algoritmi che trovano la LCS delle stringhe. Ecco il mio articolo su come farlo con gli array in JScript, ma potresti facilmente adattarlo alle sequenze di caratteri in C#: http://blogs.msdn.com/ericlippert/archive/2004/07/21/189974.aspx –

+0

ah, ho dimenticato di aggiungere un altro elemento di difficoltà: la Y è evidenziata perché mostro il SYLLABLE sbagliato in giapponese –

risposta

3

Mi sembra di ricordare qualcuno che ha chiesto questo non molto tempo fa, e in sostanza erano puntati su motori di differenza.

Una rapida ricerca su CodePlex porta in primo piano: http://www.codeplex.com/site/search?projectSearchText=diff

può valere la pena una caccia attraverso alcuni di quelli che venire - si può essere in grado di collegare qualcosa nel codice esistente?

Cheers, Terry

+1

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

+1

questo sembra perfetto per il mio uso: http://www.mathertel.de/Diff/ grazie! –

0

io non sono sicuro se questo sarebbe utile, ma questo è un modo vorrei fare:

vorrei usare una HashMap, e memorizzare tutte le parole separate da uno spazio lì. Quindi usando quello vorrei mappare con l'originale.

È possibile aggiungere tag HTML o qualsiasi altra cosa se sono diversi.

Ci deve essere un problema di prestazioni qui su un grande dizionario di parole La stessa codifica non sarebbe comunque lunga.

2

John Resig ha scritto un javascript diff algorithm, ma ha rimosso la pagina che spiega cosa fa dal suo sito. È ancora disponibile attraverso lo google cache. Ci scusiamo se il collegamento è sbagliato. Giovanni. Dovrebbe fare quello che vuoi, qualcun altro l'ha preso, modificato e messo un articolo su di esso here - completo con un test page

Problemi correlati