Differenze tra le versioni di "Individuare in una stringa i caratteri ricorrenti e loro posizioni"
Da Gambas-it.org - Wikipedia.
(5 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, nelle quali si intende individuare il carattere "''a''" in una stringa di testo, e, per ciascun carattere "''a''" individuato, la sua posizione. | + | 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() | |
− | + | Dim s As String = "abcdabcdabcd abcd abcd" | |
− | + | 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 | |
− | |||
====2<SUP>a</sup> modalità==== | ====2<SUP>a</sup> modalità==== | ||
− | + | Public Sub Main() | |
− | + | Dim s As String = "abcdabcdabcd abcd abcd" | |
− | + | Dim bb As Byte[] | |
− | + | Dim i As Integer | |
bb = Byte[].FromString(s) | bb = Byte[].FromString(s) | ||
Riga 32: | Riga 31: | ||
Next | Next | ||
− | + | End | |
− | |||
====3<SUP>a</sup> modalità==== | ====3<SUP>a</sup> modalità==== | ||
− | + | Public Sub Main() | |
− | + | Dim s As String = "abcdabcdabcd abcd abcd" | |
− | + | Dim bb As Byte[] | |
− | + | 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 | |
− | |||
====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() | |
− | |||
− | |||
− | |||
− | |||
+ | 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 | |
+ | |||
+ | |||
+ | ====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