Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 25 Novembre 2016, 23:58:52

Titolo: Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 25 Novembre 2016, 23:58:52
Ecco il nuovo compitino:

Posto questo codice sulla concatenazione di due o più stringhe:
Codice: [Seleziona]
Public Sub Main()

  Dim s1, s2 As String
 
    s1 = "aaa"
    s2 = "bbb"
   
'  1^ modalità:
      Print s1 & s2

End
mostrate ogni altra possibile modalità per concatenare le stringhe contenute nelle due variabili s1 e s2 riportate nell'esempio.
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 26 Novembre 2016, 13:22:06
A me vengono in mente solo queste:
Codice: [Seleziona]
' Gambas module file

Public Sub Main()

  Dim s1, s2 As String
 
    s1 = "aaa"
    s2 = "bbb"
   
'  1^ modalità:
      Print s1 & s2
      '============
      Print s1; s2
      'Print s1, s2 'questa penso non valga
      Print Subst(("&1&2"), s1, s2)

End
Ma immagino ce ne saranno parecchie...
 :ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 26 Novembre 2016, 14:54:55
      'Print s1, s2 'questa penso non valga
No, perché non produci una concatenazione formale delle due stringhe in una sola: hai solo un effetto visivo somigliante nella Console.

Precisiamo dunque che si deve ottenere un'unica stringa da porre in una variabile.
Insomma come fosse:
Codice: [Seleziona]
Dim s1, s2, unica As String

   unica = s1 & s2
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 26 Novembre 2016, 20:40:51
      'Print s1, s2 'questa penso non valga
...in fondo, sì, il risultato è coerente con quanto richiesto; però questo lo è solo nel caso in cui si deve scrivere con Print nella Console.

Precisiamo dunque che si deve ottenere un'unica stringa da porre in una variabile.
Insomma come fosse:
Codice: [Seleziona]
Dim s1, s2, unica As String

   unica = s1 & s2

Allora io sono rimasto ad una sola concatenazione
Codice: [Seleziona]
unica =  Subst(("&1&2"), s1, s2)

Altri modi?
 :ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 26 Novembre 2016, 21:39:09
Questo non so se è valido:
Codice: [Seleziona]
Public Sub Main()

  Dim s1 As String = "aaa"
  Dim s2 As String = "bbb"
  Dim unica As String[] = [s1, s2] 
 
  Print unica[0]; unica[1]

End

 :ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 26 Novembre 2016, 22:05:42
Questo non so se è valido:
Codice: [Seleziona]
  Print unica[0]; unica[1]

No, perché non ottieni una concatenazione effettiva in un'unica stringa delle due stringhe originarie (hai solo un effetto visivo che sembra essere un'unica stringa).
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 27 Novembre 2016, 13:58:14
Questa me l'aveva spiegata Top Fuel ma visto che se la deve essere dimenticata  :P la posto io:
Codice: [Seleziona]
Public Sub Main()

  Dim s1 As String = "aaa"
  Dim s2 As String = "bbb"
  Dim unica As String
  unica = s2
  Mid$(unica, 1, 0) = s1
 
  Print unica
 
End
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 00:19:11
......nessun altro propone qualcosa ?    :-\
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: gianfry56 - 29 Novembre 2016, 12:01:23
Se vogliamo un altro esempio (inutile e complicato):

Codice: [Seleziona]
  Dim s1, s2 As String
  Dim unica As String = ""
  Dim i As Integer
 
  s1 = "aaa"
  s2 = "bbb"

  For i = 1 To Len(s1)
    unica &= Mid(s1, i, 1)
  Next
  For i = 1 To Len(s2)
    unica &= Mid(s2, i, 1)
  Next

  Print unica


ripeto: inutile e complicato  :D
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 16:14:13
Se vogliamo un altro esempio
E' apprezzabile l'impegno e l'ingegno, però hai utilizzato l'operatore & di concatenazione delle stringhe. Operatore, che ho già utilizzato nell'esempio introduttivo all'inizio.

Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 29 Novembre 2016, 16:31:13
Ahi Gianfry56,
ora chissà che voto ti rifila!  ;D

 :D :ciao:

Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 16:39:48
ora chissà che voto ti rifila!  ;D
Certamente superiore a quello di chi ha letteralmente sprecato le variabili vettoriali di tipo String[ ]:
Codice: [Seleziona]
Dim unica As String[] = [s1, s2]  

in questo modo:    :violent:
Codice: [Seleziona]
  Print unica[0]; unica[1]
avendo invece un'altra interessante modalità per le mani !


Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 29 Novembre 2016, 17:06:32
A me che sono il genio l'unico (più o meno) che può usare 
Codice: [Seleziona]
Mid$(unica, 1, 0) = s1
'or'
unica =  Subst(("&1&2"), s1, s2)

Qui sotto potete ammirare io che bacia se stesso

 :-*

 :P :P :P
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 17:26:49
A me che sono il genio l'unico (più o meno) che può usare 
Codice: [Seleziona]
Mid$(unica, 1, 0) = s1

Ma quella non te l'aveva spiegata Top Fuel ?    :violent:

Questa me l'aveva spiegata Top Fuel ...
Codice: [Seleziona]
Mid$(unica, 1, 0) = s1
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 29 Novembre 2016, 17:42:01
Si, si sempre a cercare il pelo nell'uovo...

 :specchio:

Occorrerà un'icona per san pelo  :bad:

 :P :P :P
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 29 Novembre 2016, 18:07:46
avendo invece un'altra interessante modalità per le mani !

Ah, ho capito!

(http://scontent.cdninstagram.com/t51.2885-15/e35/12599122_964670310291520_1081578202_n.jpg?ig_cache_key=MTE3MTAzODExNTIwNjA4MjY5OQ%3D%3D.2)
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 19:06:14
Si, si sempre a cercare il pelo nell'uovo...
Non fare il levantino, ché ......
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 20:12:33
avendo invece un'altra interessante modalità per le mani !

Ah, ho capito!
Dicevo sempre con riferimento agli array di tipo String !    :hatecomputer:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 29 Novembre 2016, 22:49:57
One more
Codice: [Seleziona]
Public Sub Main()

  Dim s1 As String = "aaa"
  Dim s2 As String = "bbb" 
  Dim unica As String
 
  unica = "*Y"
  unica = Replace(unica, "*", s1)
  unica = Replace(unica, "Y", s2)
  Print unica

End
:ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 29 Novembre 2016, 23:23:37
One more
Va bene.
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 30 Novembre 2016, 11:04:07
Oggi do il mio contributo.

1) Uso del Metodo .Join( ) fornito dalle variabili vettoriali del tipo string[ ]:
Codice: [Seleziona]
Public Sub Main()
 
  Dim s1, s2, unica As String
  Dim ss As New String[]

    s1 = "aaa"
    s2 = "bbb"
 
    ss.Push(s1)
    ss.Push(s2)
   
    unica = ss.Join(Null, Null)
   
    Print unica
 
End


2) Uso di una variabile vettoriale di tipo Byte[ ] e della funzione Asc( ):
Codice: [Seleziona]
Public Sub Main()

  Dim s1, s2, unica As String
  Dim bb As Byte[]
  Dim b As Byte
 
    s1 = "aaa"
    s2 = "bbb"
   
    bb = Byte[].FromString(s1)
   
    For b = 1 To Len(s2)
      bb.Push(Asc(s2, b))
    Next
   
    unica = bb.ToString(0, bb.Count)
   
    Print unica
   
End


3) Uso di un Puntatore e dei Memory Stream:
Codice: [Seleziona]
Public Sub Main()
 
  Dim s1, s2, unica As String
  Dim p As Pointer
  Dim st As Stream
 
    s1 = "aaa"
    s2 = "bbb"
   
    p = Alloc(SizeOf(gb.Byte), Len(s1) + Len(s2))
   
    st = Memory p For Write
    Write #st, s1
    Write #st, s2
    st.Close
   
    unica = String@(p)
   
    Print unica
   
    Free(p)
 
End


4) Analogo al precedente punto 3), ma usando un file temporaneo:
Codice: [Seleziona]
Public Sub Main()
 
  Dim s1, s2, t, unica As String
  Dim fl As File
 
    s1 = "aaa"
    s2 = "bbb"
   
    t = Temp()
   
    fl = Open t For Create
    Write #fl, s1
    Write #fl, s2
    fl.Close
   
    unica = File.Load(t)
    Print unica
 
End
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 30 Novembre 2016, 21:12:27
Ah ecco a cosa ti riferivi a Join (Wayne), in realtà lo sapevo ( :angel:) ma sapevo anche che se ti lasciavo a te il compito di scriverla avresti commesso un errore da matita rossa e avrei così potuto vendicarmi di tutte le botte che mi hai dato in questo post   :rolleyes:
Infatti ti sei dimenticato che le array sono oggetti e pertanto prima di usarli vanno istanziati  :devil:
Per me l'insufficienza con l'aggravante del delicato ruolo non te la toglie nessuno  :rotfl:

 :P :ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 30 Novembre 2016, 22:16:01
Infatti ti sei dimenticato che le array sono oggetti e pertanto prima di usarli vanno istanziati
Non l'ho dimenticato, ma sono stato vittima della fretta: ho copiato in parte il codice del secondo esempio (quello con il Byte[ ]), laddove non necessita di creazione dell'oggetto array a priori.
Ho comunque apportato lì la correzione.


Per me l'insufficienza con l'aggravante del delicato ruolo non te la toglie nessuno
Condivido. Penserei anche ad una punizione esemplare che adotto motu proprio: vietarmi di inserire altri "Compitini per casa" in futuro.   (http://forum.ubuntu-it.org/images/smilies/zomp.gif)
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 30 Novembre 2016, 22:50:52

Non l'ho dimenticato, ma sono stato vittima della fretta...
Lo immaginavo  :D e devo confessare che Join non lo conoscevo, sospettavo che ci fosse qualcosa di opposto a Split ma non l'ho trovato  ;D
Citazione
Per me l'insufficienza con l'aggravante del delicato ruolo non te la toglie nessuno
Comunque condivido. Penserei anche ad una punizione esemplare che adotto motu proprio: vietarmi di inserire altri "Compitini per casa" in futuro.   (http://forum.ubuntu-it.org/images/smilies/zomp.gif)
Ma questa non è una punizione, è un premio.  :P
Però hai ragione che senso ha se si partecipa così in pochi?
 :ciao:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 30 Novembre 2016, 23:38:54
Ma questa non è una punizione, è un premio.
...ed infatti ho preso la palla al balzo !    :devil:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: kicco - 01 Dicembre 2016, 13:33:37
...ragazzi, mi fate paura! :P
Citazione
Però hai ragione che senso ha se si partecipa così in pochi?
...e forse non solo a me!  :P :P

Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: Gianluigi - 01 Dicembre 2016, 13:56:18
 :rotfl: :rotfl: :rotfl:
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: vuott - 01 Dicembre 2016, 14:41:25
...ragazzi, mi fate paura!

...in che senso ?    :-\
Titolo: Re:Compitino per casa sulla Concatenazione delle Stringhe
Inserito da: kicco - 01 Dicembre 2016, 16:54:20
Citazione
...in che senso ?   
Che a noi esseri terreni non è dato raggiungere tali vertici  :P e a parte la concatenazione con "&" il resto ci appare come l'esercizio di abili contorsionisti che quando pensi abbiano raggiunto il massimo possibile, proseguono con un esercizio ancora più acrobatico...
Il pubblico applaude :D :D :D :D

PS: Ovviamente ho imparato anch'io e adesso riesco a toccarmi le punte dei piedi :)
 :ciao: :ciao: :ciao: