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

Da Gambas-it.org - Wikipedia.
 
(9 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à====
  '''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 28: Riga 27:
 
   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
 
    
 
    
  '''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 45: Riga 45:
 
   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'''
+
  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

Versione attuale delle 18:32, 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