Differenze tra le versioni di "Conoscere il numero e la posizione di tutte le occorrenze di una sottostringa in una stringa"
Da Gambas-it.org - Wikipedia.
(4 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Mostriamo alcune modalità per conoscere la posizione di ogni eventuale occorrenza di una parola all'interno di una stringa. | Mostriamo alcune modalità per conoscere la posizione di ogni eventuale occorrenza di una parola all'interno di una stringa. | ||
− | + | ===Usando le sole risorse di Gambas=== | |
− | === | + | Public Sub Main() |
− | |||
Dim s As String | Dim s As String | ||
Dim i, ris As Integer | Dim i, ris As Integer | ||
− | + | ||
<FONT Color=gray>' ''Poniamo il caso che la stringa sia la seguente...''</font> | <FONT Color=gray>' ''Poniamo il caso che la stringa sia la seguente...''</font> | ||
− | + | s = "mela pera arancia banana pera arancia banana mela pera mela" | |
− | + | Repeat | |
<FONT Color=gray>' ''...e che la parola, di cui cercare le occorrenze, sia "pera":''</font> | <FONT Color=gray>' ''...e che la parola, di cui cercare le occorrenze, sia "pera":''</font> | ||
− | + | i = InStr(s, "pera", i) | |
− | + | If i Then | |
− | + | Inc i | |
− | + | Inc ris | |
− | + | Endif | |
− | + | Until i == 0 | |
− | + | Print ris | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | End | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Riga 60: | Riga 33: | ||
− | + | Public Sub Main() | |
− | + | Dim s, su As String | |
− | + | Dim i As Integer | |
<FONT Color=gray>' ''Va a generare l'apposita libreria dinamica condivisa esterna:''</font> | <FONT Color=gray>' ''Va a generare l'apposita libreria dinamica condivisa esterna:''</font> | ||
Riga 78: | Riga 51: | ||
Print "Numero occorrenze della sottostringa '"; su; "': "; i | Print "Numero occorrenze della sottostringa '"; su; "': "; i | ||
− | + | End | |
− | + | Private Procedure CreaSo() | |
<FONT Color=gray>' ''Imposta il sorgente della libreria dinamica condivisa esterna:''</font> | <FONT Color=gray>' ''Imposta il sorgente della libreria dinamica condivisa esterna:''</font> | ||
Riga 91: | Riga 64: | ||
"\n\n" & | "\n\n" & | ||
" do {\n" & | " do {\n" & | ||
− | " stringa = strstr (stringa, substr) | + | " if (stringa = strstr (stringa, substr)) {;\n" & |
− | |||
" ++stringa;\n" & | " ++stringa;\n" & | ||
" ++i;\n" & | " ++i;\n" & | ||
− | " | + | " }" & |
− | "\n } | + | "\n } while (stringa);" & |
− | + | "\n\n return i;\n\n}") | |
− | "\n\n | ||
− | |||
Riga 105: | Riga 75: | ||
Shell "gcc -o /tmp/lib_Occorrenze.so /tmp/lib_Occorrenze.c -shared -fPIC" Wait | Shell "gcc -o /tmp/lib_Occorrenze.so /tmp/lib_Occorrenze.c -shared -fPIC" Wait | ||
− | + | End |
Versione attuale delle 16:52, 23 giu 2023
Mostriamo alcune modalità per conoscere la posizione di ogni eventuale occorrenza di una parola all'interno di una stringa.
Usando le sole risorse di Gambas
Public Sub Main() Dim s As String Dim i, ris As Integer ' Poniamo il caso che la stringa sia la seguente... s = "mela pera arancia banana pera arancia banana mela pera mela" Repeat ' ...e che la parola, di cui cercare le occorrenze, sia "pera": i = InStr(s, "pera", i) If i Then Inc i Inc ris Endif Until i == 0 Print ris End
Utilizzando un'apposita libreria dinamica condivisa .so esterna
Quest'altra modalità prevede la creazione e l'uso di un'apposita libreria dinamica condivisa .so esterna, scritta in C, che in sostanza provvederà a cercare il solo numero delle occorrenze della substringa all'interno della stringa:
Library "/tmp/lib_Occorrenze" ' int Occorrenze(const char *stringa, const char *substr) ' Ritorna il numero di occorrenze di una sottostringa all'interno di una stringa. Private Extern Occorrenze(stringa As String, substr As String) As Integer Public Sub Main() Dim s, su As String Dim i As Integer ' Va a generare l'apposita libreria dinamica condivisa esterna: CreaSo() ' La stringa è la seguente: s = "mela pera arancia limone pera banana noce mela fico pera noce" ' La sottostringa di cui conoscere il numero di occorrenze: su = "pera" i = Occorrenze(s, su) Print "Numero occorrenze della sottostringa '"; su; "': "; i End Private Procedure CreaSo() ' Imposta il sorgente della libreria dinamica condivisa esterna: File.Save("/tmp/lib_Occorrenze.c", "#include <string.h>" & "\n\n" & "int Occorrenze(const char *stringa, const char *substr) {" & "\n\n" & " int i = 0;" & "\n\n" & " do {\n" & " if (stringa = strstr (stringa, substr)) {;\n" & " ++stringa;\n" & " ++i;\n" & " }" & "\n } while (stringa);" & "\n\n return i;\n\n}") ' Genera la libreria dinamica condivisa esterna: Shell "gcc -o /tmp/lib_Occorrenze.so /tmp/lib_Occorrenze.c -shared -fPIC" Wait End