Strstr (): differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (Una versione intermedia di uno stesso utente non è mostrata) | |||
| Riga 6: | Riga 6: | ||
Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta: | Volendola utilizzare in Gambas, bisognerà dichiararla con ''Extern'', nonché dichiarare la libreria di C: ''libc.so.6'', nella quale la funzione è contenuta: | ||
Private <FONT color=#B22222>Extern strstr</font>(__haystack As String, __needle As String) As Pointer In "<FONT color=#B22222>libc:6</font>" | Private <FONT color=#B22222>Extern strstr</font>(__haystack As String, __needle As String) As Pointer In "<FONT color=#B22222>libc:6</font>" | ||
Mostriamo un esempio, nel quale data una stringa contenente alcune parole, si dovrà verificare quante parole terminano con i caratteri "''are''". Per ottenere il risultato, ci serviremo anche della funzione "[[Strtok_()|strtok()]]": | |||
Mostriamo un esempio, nel quale data una stringa contenente alcune parole, si dovrà verificare quante parole terminano con i caratteri "''are''". Per ottenere il risultato, ci serviremo anche della funzione | |||
Library "libc:6" | Library "libc:6" | ||
| Riga 20: | Riga 18: | ||
Public Sub Main() | |||
Dim hay, ndl, sp As String | |||
Dim token As Pointer | |||
Dim i As Integer | |||
hay = "bere mangiare dormire saltare fare vedere" | hay = "bere mangiare dormire saltare fare vedere" | ||
ndl = "are" | ndl = "are" | ||
| Riga 39: | Riga 37: | ||
Print "Parole che contengono il tema 'are': "; i | Print "Parole che contengono il tema 'are': "; i | ||
End | |||
====Sostituire un carattere all'interno di una stringa==== | ====Sostituire un carattere all'interno di una stringa==== | ||
Per sostituire un carattere all'interno di una stringa con la funzione esterna " | Per sostituire un carattere all'interno di una stringa con la funzione esterna "strstr()" dovremo usare i ''[[Definizione ed uso dei Memory Stream|Memory Stream]]'': | ||
Library "libc:6" | Library "libc:6" | ||
| Riga 51: | Riga 49: | ||
Public Sub Main() | |||
Dim hay As String = "abcdefg" | |||
Dim st As Stream | |||
st = Memory <FONT color=#B22222>strstr</font>(hay, "d") For Write | st = Memory <FONT color=#B22222>strstr</font>(hay, "d") For Write | ||
| Riga 62: | Riga 60: | ||
Print hay | Print hay | ||
End | |||
Versione attuale delle 16:06, 16 giu 2024
La funzione strstr(), dichiarata nel file header "/usr/include/string.h" come segue:
char *strstr (const char *__haystack, const char *__needle)
cerca la prima occorrenza dela sottostringa __needle all'interno della stringa __haystack. Il carattere di fine stringa '\0' non viene preso in considerazione.
Volendola utilizzare in Gambas, bisognerà dichiararla con Extern, nonché dichiarare la libreria di C: libc.so.6, nella quale la funzione è contenuta:
Private Extern strstr(__haystack As String, __needle As String) As Pointer In "libc:6"
Mostriamo un esempio, nel quale data una stringa contenente alcune parole, si dovrà verificare quante parole terminano con i caratteri "are". Per ottenere il risultato, ci serviremo anche della funzione "strtok()":
Library "libc:6"
' char *strstr (const char *__haystack, const char *__needle)
' Find the first occurrence of NEEDLE in HAYSTACK.
Private Extern strstr(__haystack As String, __needle As String) As Pointer
' char *strtok (char *__restrict __s, const char *__restrict __delim)
' Divide S into tokens separated by characters in DELIM.
Private Extern strtok(__s As Pointer, __delim As String) As Pointer
Public Sub Main()
Dim hay, ndl, sp As String
Dim token As Pointer
Dim i As Integer
hay = "bere mangiare dormire saltare fare vedere"
ndl = "are"
sp = Chr(32)
token = strtok(VarPtr(hay), sp)
While token > 0
If strstr(String@(token), ndl) <> Null Then Inc i
token = strtok(0, sp)
Wend
Print "Parole che contengono il tema 'are': "; i
End
Sostituire un carattere all'interno di una stringa
Per sostituire un carattere all'interno di una stringa con la funzione esterna "strstr()" dovremo usare i Memory Stream:
Library "libc:6" ' char *strstr (const char *__haystack, const char *__needle) ' Find the first occurrence of NEEDLE in HAYSTACK. Private Extern strstr(__haystack As String, __needle As String) As Pointer Public Sub Main() Dim hay As String = "abcdefg" Dim st As Stream st = Memory strstr(hay, "d") For Write Write #st, "X" st.Close Print hay End