Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [vb.net] Sostituzione

    Praticamente ho un testo:

    "abaababababaababa"

    e un vocabolario che contiene:

    "aa" k
    "ab" m
    "ba" n
    "bb" s
    "abab" t
    "aaaaaa" g

    La semplice funzione replace non mi va bene perche seno rimarrebero delle lettere in mezzo non sostituite... c'è un modo di sostituire le parole in ordine cioè prendere un breve frammento di testo iniziale sostituire andare avanti prenderne un altro e sostituire dinuovo?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Non mi è chiara l'applicazione pratica, tuttavia non capisco qual è il problema con Replace: forse dovresti solamente sostituire le parole ma partendo da quelle più lunghe, invece che da quelle più corte (che potrebbero snaturare le prime).
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Chiarimenti

    Allora il problema è questo in poco che parole

    Se io ho una stringa tipo questa: "ababababababababababababbababababababa"

    e sostituisco semplicemente con replace:

    str = str.replace("aa","1")
    str = str.replace("ab","2")
    str = str.replace("ba","3")
    str = str.replace("bb","4")

    Ottengo: "222222222222b222222a"

    e quindi mi rimangangono delle lettere a e b, mentre se prendessi due caratteri alla volta avrei:

    "2222222222223333333"

    Cosi è piu' chiaro?

    tuttavia c'è un altro piccolo problema il vocabolario è fatto di stringhe che hanno una lunghezza che varia da 2 a 8 caratteri... Si potrebbe considerare due caratteri e poi se non c'è nel vocabolario considerare 3 caratteri e cosi fino ad 8 dove è sicuro che ci sarà quello che si cerca..

    Non so se è troppo difficile da fare...

    Grazie buona estate

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Scusa, ma non ha senso pensare ad una sostituzione di questo tipo senza suddividere in modo forzato le lettere a gruppi delle stesse dimensioni (ad esempio, 2 caratteri per ogni elemento da sostituire).

    Se hai una stringa come ababababababababab e tu definisci due sequenze, ab e ba da sostituire, senza attribuire a queste una precedenza, sostituendo prima una e poi l'altra o viceversa avrai comunque una situazione errata, perché nel sostituire ab elimini tutte le sequenze ba, e viceversa accade il contrario.

    Spiega cosa intendi fare con precisione, perché esemplificando in questo modo senza avere un caso reale e senza comprendere qual è il motivo per cui queste sostituzioni devono essere fatte non c'è la possibilità di suggerire alcuna soluzione valida.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5

    Chiarimenti

    Prova a farlo manualmente, senza usare vb.net sostituiscili tu due a due in un foglio di carta...

    la stringa è "ababababababababababababbababababababa"

    ("aa","1")
    ("ab","2")
    ("ba","3")
    ("bb","4")

    vedrai che ottieni "2222222222223333333"

    mentre poi prova con vb.net e con

    str = str.replace("aa","1")
    str = str.replace("ab","2")
    str = str.replace("ba","3")
    str = str.replace("bb","4")

    Praticamente il risultato che otterai manualmente è quello che mi interessa, l'altro usando replace e quello che è sbagliato..

    Ciao prova poi se nn ti ho spiegato ti riposto tutto piu chiaramente cmq prova prima di rispondere... Ciao grazie

  6. #6

    Re: Chiarimenti

    Originariamente inviato da DonaAnto@vito
    Prova a farlo manualmente, senza usare vb.net sostituiscili tu due a due in un foglio di carta...

    la stringa è "ababababababababababababbababababababa"

    ("aa","1")
    ("ab","2")
    ("ba","3")
    ("bb","4")

    vedrai che ottieni "2222222222223333333"

    mentre poi prova con vb.net e con

    str = str.replace("aa","1")
    str = str.replace("ab","2")
    str = str.replace("ba","3")
    str = str.replace("bb","4")

    Praticamente il risultato che otterai manualmente è quello che mi interessa, l'altro usando replace e quello che è sbagliato..

    Ciao prova poi se nn ti ho spiegato ti riposto tutto piu chiaramente cmq prova prima di rispondere... Ciao grazie

    Guarda che ti sbagli, e' il tuo "problema" o "algoritmo" o "chiamalocomevuoi" che e' ambiguo: nel senso che non c'e' un
    rigore logico, NECESSARIO per un'applicazione computerizzata !

    O quantomeno, non hai definito bene TUTTE le regole da seguire per la sua applicazione...

    Infatti quando hai "abbababa.." sostituisci le prime due lettere (ab) con 2, poi (ci sono "bababa")ANZICHE' PROSEGUIRE con la ricerca delle restanti "ab", vorresti ottenere "3" iniziando a sostituire le "ba". QUESTO in base a cosa ? E' discrezionale ?

    Capisci l'ambiguita' ?

    Per semplificare: se partissi con SOLO "aba", cosa otterresti dopo le sostituzioni ?
    "2a" oppure "a3" ? In base a cosa ??????

    IceCube_HT (VB6 fan Club)

  7. #7

    Re: Chiarimenti

    Originariamente inviato da DonaAnto@vito


    vedrai che ottieni "2222222222223333333"
    ehm caro, mi sa che ti sbagli non ottieni quel numero manco a mano
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  8. #8

    Non mi sbaglio

    "ababababababababababababbababababababa" allora questa è la stringa se la divido in due a due a mano.. Cosa ottengo?

    Inoltre:
    aa = 1
    ab = 2
    ba = 3
    bb = 4

    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ab = 2
    ba = 3
    ba = 3
    ba = 3
    ba = 3
    ba = 3
    ba = 3
    ba = 3

    quindi unendo i 2 e i 3 ::


    "2222222222223333333"

    almeno

    Infatti quando hai "abbababa.." sostituisci le prime due lettere (ab) con 2, poi (ci sono "bababa")ANZICHE' PROSEGUIRE con la ricerca delle restanti "ab", vorresti ottenere "3" iniziando a sostituire le "ba". QUESTO in base a cosa ? In base al fattache appena non si trova piu un altro ab di seguito bisognerebbe iniziare la ricerca del "ba" e se non si trova "bb" si ritorna a "aa" e cosi via.

    Questo io lo saprei pure fare dividerle a due a due il problema è che le stringhe da sostituire oltre ad "aa","ab","ba","bb" hanno una lughezza diversa tipo per esempio "cdddd".

    Spero di essere chiaro almeno per il primo pezzo di testo..

  9. #9
    Devi definire un sistema di priorita' della sostituzione della stringa.

    Per esempio:
    la stringa 'aaa' deve essere sostituita per 1ma e cosi' via.

    Credo che il sistema suggerito da alka sia l'ideale per il tuo caso, oppure ti fai una funzione ad hoc convertendo la stringa in un array di char

  10. #10
    ma nn si può con un sistema di priorità perche varia da testo a testo, inoltre anche se sostiutisci prima la "aa" e poi "ab" per esempio se ti capita dinuovo "aa" ritorniamo al punto di partenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.