Differenze tra le versioni di "Individuare in una stringa i caratteri ricorrenti e loro posizioni"

Da Gambas-it.org - Wikipedia.
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Per poter individuare in una stringa i caratteri ricorrenti e loro rispettive posizioni, possiamo adottare varie modalità.
 
Per poter individuare in una stringa i caratteri ricorrenti e loro rispettive posizioni, possiamo adottare varie modalità.
  
Ne mostriamo alcune.
+
Ne mostriamo alcune, nelle quali si intende individuare il carattere "''a''" in una stringa di testo, e, per ciascun carattere "''a''" individuato, la sua posizione.
  
 
====1<SUP>a</sup> modalità====
 
====1<SUP>a</sup> modalità====
Riga 19: Riga 19:
 
====2<SUP>a</sup> modalità====
 
====2<SUP>a</sup> modalità====
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
+
 
 
   Dim s As String = "abcdabcdabcd abcd abcd"
 
   Dim s As String = "abcdabcdabcd abcd abcd"
 
   Dim bb As Byte[]
 
   Dim bb As Byte[]
Riga 28: Riga 28:
 
   For i = 0 To bb.Max
 
   For i = 0 To bb.Max
 
     If bb[i] = 97 Then Print i + 1, "a"
 
     If bb[i] = 97 Then Print i + 1, "a"
 +
<FONT Color=gray>' ''oppure:'' '''If bb[i] = 97 Then Print i + 1, bb.ToString(i, 1)'''</font>
 +
<FONT Color=gray>' ''oppure:'' '''If bb.ToString(i,1) = "a" Then Print i + 1, bb.ToString(i, 1)'''</font>
 
   Next
 
   Next
 
    
 
    
Riga 45: Riga 47:
 
   Do
 
   Do
 
     If Byte@(bb.Data + i) = 97 Then Print i + 1, "a"
 
     If Byte@(bb.Data + i) = 97 Then Print i + 1, "a"
 +
<FONT Color=gray>' ''oppure:'' '''If bb[i] = 97 Then Print i + 1, bb.ToString(i, 1)'''</font>
 +
<FONT Color=gray>' ''oppure:'' '''If bb.ToString(i,1) = "a" Then Print i + 1, bb.ToString(i, 1)'''</font>
 
     Inc i
 
     Inc i
 
   Loop Until Byte@(bb.Data + i) = 0
 
   Loop Until Byte@(bb.Data + i) = 0
 +
 
 +
'''End'''
 +
 +
 +
 +
====4<SUP>a</sup> modalità====
 +
Una leggera variante della precedente modalità:
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String = "abcdabcdabcd abcd abcd"
 +
  Dim p As Pointer
 +
  Dim i As Integer
 +
 
 +
  p = Alloc(s)
 +
   
 +
  Do
 +
    If Byte@(p + i) = 97 Then Print i + 1, "a"
 +
    Inc i
 +
  Loop Until Byte@(p + i) = 0
 +
 
 +
  Free(p)
 +
 
 +
'''End'''
 +
 +
 +
 +
====5<SUP>a</sup> modalità====
 +
Una variante della precedente modalità, usando una variabile di tipo Stringa e la funzione ''InStr( )'':
 +
'''Public''' Sub Main()
 +
 
 +
  Dim s As String = "abcdabcdabcd abcd abcd"
 +
  Dim i, r As Integer
 +
 
 +
  i = 1
 +
 
 +
  Do
 +
    i = InStr(s, "b", i)
 +
    If i > 0 Then
 +
      Print i,
 +
      Inc i
 +
      Inc r
 +
    Endif
 +
  Loop Until i = 0
 +
 
 +
  Print "\n\n"; r
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione attuale delle 16:43, 15 set 2016

Per poter individuare in una stringa i caratteri ricorrenti e loro rispettive posizioni, possiamo adottare varie modalità.

Ne mostriamo alcune, nelle quali si intende individuare il carattere "a" in una stringa di testo, e, per ciascun carattere "a" individuato, la sua posizione.

1a modalità

Public Sub Main()
 
 Dim s As String = "abcdabcdabcd abcd abcd"
 Dim i As Integer
 
  For i = 1 To String.Len(s)
    If Mid(s, i, 1) = "a" Then Print i, "a"
  Next
  
End


2a modalità

Public Sub Main()
 
 Dim s As String = "abcdabcdabcd abcd abcd"
 Dim bb As Byte[]
 Dim i As Integer
 
  bb = Byte[].FromString(s)
   
  For i = 0 To bb.Max
    If bb[i] = 97 Then Print i + 1, "a"
' oppure: If bb[i] = 97 Then Print i + 1, bb.ToString(i, 1)
' oppure: If bb.ToString(i,1) = "a" Then Print i + 1, bb.ToString(i, 1)
  Next
  
End


3a modalità

Public Sub Main()
 
 Dim s As String = "abcdabcdabcd abcd abcd"
 Dim bb As Byte[]
 Dim i As Integer
 
  bb = Byte[].FromString(s)
   
  Do
    If Byte@(bb.Data + i) = 97 Then Print i + 1, "a"
' oppure: If bb[i] = 97 Then Print i + 1, bb.ToString(i, 1)
' oppure: If bb.ToString(i,1) = "a" Then Print i + 1, bb.ToString(i, 1)
    Inc i
  Loop Until Byte@(bb.Data + i) = 0
  
End


4a modalità

Una leggera variante della precedente modalità:

Public Sub Main()
 
 Dim s As String = "abcdabcdabcd abcd abcd"
 Dim p As Pointer
 Dim i As Integer
 
  p = Alloc(s)
   
  Do
    If Byte@(p + i) = 97 Then Print i + 1, "a"
    Inc i
  Loop Until Byte@(p + i) = 0
  
  Free(p)
  
End


5a modalità

Una variante della precedente modalità, usando una variabile di tipo Stringa e la funzione InStr( ):

Public Sub Main()
 
 Dim s As String = "abcdabcdabcd abcd abcd"
 Dim i, r As Integer
 
  i = 1
  
  Do
    i = InStr(s, "b", i)
    If i > 0 Then
      Print i,
      Inc i
      Inc r
    Endif
  Loop Until i = 0
 
  Print "\n\n"; r
  
End