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

Da Gambas-it.org - Wikipedia.
Riga 4: Riga 4:
  
 
====1<SUP>a</sup> modalità====
 
====1<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 i As Integer
+
  Dim i As Integer
 
    
 
    
 
   For i = 1 To String.Len(s)
 
   For i = 1 To String.Len(s)
Riga 13: Riga 13:
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
====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[]
  Dim i As Integer
+
  Dim i As Integer
 
    
 
    
 
   bb = Byte[].FromString(s)
 
   bb = Byte[].FromString(s)
Riga 32: Riga 31:
 
   Next
 
   Next
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
====3<SUP>a</sup> modalità====
 
====3<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[]
  Dim i As Integer
+
  Dim i As Integer
 
    
 
    
 
   bb = Byte[].FromString(s)
 
   bb = Byte[].FromString(s)
Riga 52: Riga 50:
 
   Loop Until Byte@(bb.Data + i) = 0
 
   Loop Until Byte@(bb.Data + i) = 0
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
====4<SUP>a</sup> modalità====
 
====4<SUP>a</sup> modalità====
 
Una leggera variante della precedente modalità:
 
Una leggera variante della precedente modalità:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
 
  Dim s As String = "abcdabcdabcd abcd abcd"
 
  Dim p As Pointer
 
  Dim i As Integer
 
 
    
 
    
 +
  Dim s As String = "abcdabcdabcd abcd abcd"
 +
  Dim p As Pointer
 +
  Dim i As Integer
 +
 
   p = Alloc(s)
 
   p = Alloc(s)
 
      
 
      
Riga 73: Riga 70:
 
   Free(p)
 
   Free(p)
 
    
 
    
  '''End'''
+
  End
 
 
  
  
 
====5<SUP>a</sup> modalità====
 
====5<SUP>a</sup> modalità====
 
Una variante della precedente modalità, usando una variabile di tipo Stringa e la funzione ''InStr( )'':
 
Una variante della precedente modalità, usando una variabile di tipo Stringa e la funzione ''InStr( )'':
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
  Dim s As String = "abcdabcdabcd abcd abcd"
+
  Dim s As String = "abcdabcdabcd abcd abcd"
  Dim i, r As Integer
+
  Dim i, r As Integer
 
    
 
    
 
   i = 1
 
   i = 1
Riga 97: Riga 93:
 
   Print "\n\n"; r
 
   Print "\n\n"; r
 
    
 
    
  '''End'''
+
  End

Versione delle 18:31, 28 giu 2024

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