Autore Topic: Cambiare un carattere all'interno di una stringa fra molti uguali  (Letto 891 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Vorrei creare una specifica  pagina su detto argomento.

Indicate le possibili modalità che suggerireste per modificare un solo carattere fra due o più identici presenti in una stringa.

Per essere più chiaro, avendo ad esempio questa stringa: aaazbbbzccczddd, indicate tutte le modalità (scrivendo breve, ma adeguato codice) che vi vengono in mente per mutare la sola seconda " z " in uno spazio (ossia codice ASCII &h20), cosicché al termine si abbia questa stringa: aaazbbb ccczddd .

Gli autori degli algoritmi, adottati nella pagina da creare, saranno lì citati.



« Ultima modifica: 09 Gennaio 2017, 16:46:56 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #1 il: 09 Gennaio 2017, 15:49:57 »
Dai.... esco io per primo dalla trincea, usando i Memory Stream.

Vedi la pagina della Wiki che si va scrivendo. Il collegamento è in fondo a questa pagina.
« Ultima modifica: 15 Gennaio 2017, 23:03:08 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #2 il: 09 Gennaio 2017, 16:39:52 »
Riedizione di Mid$ :

Codice: [Seleziona]
Public Sub Main()
   
  Dim s As String = "aaazbbbzccczddd"
 
  Mid$(s, 8, 1) = " "
 
  Print s
   
End
:ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #3 il: 09 Gennaio 2017, 16:59:17 »
Altro uso di Mid con vettore:

Codice: [Seleziona]
Public Sub Main()
   
  Dim s As String = "aaazbbbzccczddd"
  Dim c As String
  Dim ss As New String[]
  Dim i As Byte
 
  For i = 1 To Len(s)
    c = Mid(s, i, 1)
    If i = 8 Then c = " "
    ss.Push(c)
  Next
  For i = 0 To ss.Max
    Print ss[i];
  Next
 
End

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #4 il: 09 Gennaio 2017, 17:09:07 »
Il secondo esempio, però, è una mera complicazione della prima modalità, da te suggerita (e che io ho posto come primo esempio nella pagina della Wiki), in quanto usi nuovamente la funzione Mid( ) come risorsa comunque principale dell'algoritmo. 

Pertanto non la riporterei lì. :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #5 il: 09 Gennaio 2017, 17:47:25 »
E' possibile anche usare una variabile vettoriale di tipo Byte( ).

Vedi la pagina della Wiki che si va scrivendo. Il collegamento è in fondo.
« Ultima modifica: 15 Gennaio 2017, 23:03:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #6 il: 09 Gennaio 2017, 18:23:58 »

Pertanto non la riporterei lì. :-X

Va bene capo, sei tu quello che decide  :P
Non ho capito perché se il codice lo propongo io o un altro ne riporti il nome mentre se lo proponi tu no.

Se mi è concesso l'ardire, ti suggerirei un esempio  con il puntatore tipo questo  ;D

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #7 il: 09 Gennaio 2017, 18:34:16 »
Non ho capito perché se il codice lo propongo io o un altro ne riporti il nome mentre se lo proponi tu no.
Perchè io nel caso come questo appaio comunque come creatore della pagina, e pertanto io, essendo appunto autore della pagina, penso che si capisca che gli esempi privi di nota di rimando ad uno specifico autore, si intendono suggeriti dal redattore della pagina Wiki, ossia in questo caso da me.



Se mi è concesso l'ardire, ti suggerirei un esempio  con il puntatore tipo questo
Giusta osservazione. Infatti il mio esempio con i Memory Stream come anche quello da te suggerito, si basa sulla capacità di tale risorsa di Gambas di scrivere nelle aree di memoria riservate accedendovi tramite gli indirizzi di memoria contenuti nelle corrispondenti variabili di tipo Puntatore.
Il tuo giusto suggerimento si intende pertanto già pienamente soddisfatto con il mio primo esempio.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #8 il: 09 Gennaio 2017, 19:18:26 »

Se mi è concesso l'ardire, ti suggerirei un esempio  con il puntatore tipo questo
Giusta osservazione. Infatti il mio esempio con i Memory Stream come anche quello da te suggerito, si basa sulla capacità di tale risorsa di Gambas di scrivere nelle aree di memoria riservate accedendovi tramite gli indirizzi di memoria contenuti nelle corrispondenti variabili di tipo Puntatore.
Il tuo giusto suggerimento si intende pertanto già pienamente soddisfatto con il mio primo esempio.

Ops! Non me n'ero accorto, eppure è la prima voce dell'algoritmo  :mad:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #9 il: 09 Gennaio 2017, 20:08:44 »
Volendo usare Replace:
Codice: [Seleziona]
Public Sub Main()
   
  Dim s As String = "aaazbbbzccczddd"
  s = Replace(s, "zc", " c")
  Print s
 
End

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #10 il: 09 Gennaio 2017, 20:37:41 »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #11 il: 09 Gennaio 2017, 21:22:26 »
Un metodo come un'altro
Codice: [Seleziona]
Public Sub Main()
  Dim s, sValore1, sValore2 As String

  s = "aaazbbbzccczddd"

  sValore1 = Left(s, 7)
  sValore2 = Right(s, 7)

  Print sValore1 & Space(1) & sValore2
End
:ciao:
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #12 il: 09 Gennaio 2017, 22:57:28 »
Un pò lunghino ma funge:
Codice: [Seleziona]
Dim i, conto As Byte
Dim stringa$ As String = "aaazbbbzccczddd"
For i = 1 To Len(stringa$)
   If Mid$(stringa$, i, 1) = "z" Then Inc conto
   If conto = 2 Then
      stringa$ = Replace(stringa$, "bz", "b ")
   Endif
Next
Print stringa$
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #13 il: 09 Gennaio 2017, 23:07:14 »
Un metodo come un'altro
Questa va bene, la inserisco, perché hai utilizzato funzioni - Left( ), Right( ) ed anche Space( ) - non usate prima.



Un pò lunghino ma funge:
Apprezzo il tuo contributo e ti ringrazio, ma - seppur funzionante e valido - il tuo esempio utilizza funzioni - Mid( ) e Replace( ) - comunque già usate in modalità più semplice nei precedenti esempi, e già riportati quindi nella pagina della Wiki.
Grazie moltissimo, comunque.
Riprova: magari c'è qualche altra soluzione che ci sfugge.    :-\
« Ultima modifica: 09 Gennaio 2017, 23:25:23 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Cambiare un carattere all'interno di una stringa fra molti uguali
« Risposta #14 il: 09 Gennaio 2017, 23:23:28 »
Abbiamo riportato nella nuova pagina della Wiki su questo tema finora 5 modalità !

http://www.gambas-it.org/wiki/index.php?title=Modificare_un_carattere_di_una_stringa
« Ultima modifica: 09 Gennaio 2017, 23:26:17 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »