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.
(Creata pagina con "Mostriamo alcune modalità per conoscere la posizione di ogni eventuale occorrenza di una parola all'interno di una stringa. ===Con le sole risorse di Gambas=== '''Public''...") |
|||
Riga 55: | Riga 55: | ||
===Utilizzando un'apposita libreria dinamica condivisa .so esterna=== | ===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 | + | 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" | Library "/tmp/lib_Occorrenze" | ||
Versione delle 17:57, 15 set 2016
Mostriamo alcune modalità per conoscere la posizione di ogni eventuale occorrenza di una parola all'interno di una stringa.
Con le sole risorse di Gambas
Public Sub Main() Dim s As String Dim i, r As Integer ' Poniamo il caso che la stringa sia la seguente... s = "mela pera arancia banana pera arancia banana mela pera mela" i = 1 Do ' ...e che la parola, di cui cercare le occorrenze, sia "pera": i = InStr(s, "pera", i) If i > 0 Then Print i, Inc i Inc r Endif Loop Until i = 0 Print "\n\n"; r End
Public Sub Main() Dim s As String Dim ss As String[] Dim n, c As Short s = "mela pera arancia banana pera arancia banana mela pera mela" s = Replace(s, "\n", Chr(32)) ss = Split(s, " ") Print "L'occorrenza è stata trovata alle posizioni:" For n = 0 To ss.Max If ss[n] = "pera" Then Inc c Print n + 1 Endif Next Print "\nper un totale di "; c; " volte." 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" & " stringa = strstr (stringa, substr);\n" & " if (stringa) {;\n" & " ++stringa;\n" & " ++i;\n" & " }else{\n break;\n }" & "\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