Strstr (): differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
(Creata pagina con "La funzione '''strstr()''', dichiarata nel file header "''/usr/include/string.h''" come segue: char *strstr (const char *__haystack, const char *__needle) cerca la prima occo...") |
Nessun oggetto della modifica |
||
| (8 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 5: | Riga 5: | ||
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 | 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" | ||
<FONT color=Gray>' ''char *strstr (const char *__haystack, const char *__needle)'' | <FONT color=Gray>' ''char *strstr (const char *__haystack, const char *__needle)'' | ||
' ''Find the first occurrence of NEEDLE in HAYSTACK.''</font> | ' ''Find the first occurrence of NEEDLE in HAYSTACK.''</font> | ||
Private Extern <FONT color=#B22222>strstr</font>(__haystack As String, __needle As String) As | Private Extern <FONT color=#B22222>strstr</font>(__haystack As String, __needle As String) As Pointer | ||
<FONT color=Gray>' ''char *strtok (char *__restrict __s, const char *__restrict __delim)'' | <FONT color=Gray>' ''char *strtok (char *__restrict __s, const char *__restrict __delim)'' | ||
' ''Divide S into tokens separated by characters in DELIM.''</font> | ' ''Divide S into tokens separated by characters in DELIM.''</font> | ||
Private Extern strtok(__s As | 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" | hay = "bere mangiare dormire saltare fare vedere" | ||
ndl = "are" | ndl = "are" | ||
sp = Chr(32) | sp = Chr(32) | ||
token = strtok(hay, sp) | token = strtok(VarPtr(hay), sp) | ||
While | While token > 0 | ||
If strstr(token, ndl) <> Null Then Inc i | If <FONT color=#B22222>strstr</font>(String@(token), ndl) <> Null Then Inc i | ||
token = strtok( | token = strtok(0, sp) | ||
Wend | Wend | ||
Print "Parole che contengono | 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 ''[[Definizione ed uso dei Memory Stream|Memory Stream]]'': | |||
Library "libc:6" | |||
<FONT color=Gray>' ''char *strstr (const char *__haystack, const char *__needle)'' | |||
' ''Find the first occurrence of NEEDLE in HAYSTACK.''</font> | |||
Private Extern <FONT color=#B22222>strstr</font>(__haystack As String, __needle As String) As Pointer | |||
Public Sub Main() | |||
Dim hay As String = "abcdefg" | |||
Dim st As Stream | |||
st = Memory <FONT color=#B22222>strstr</font>(hay, "d") For Write | |||
Write #st, "X" | |||
st.Close | |||
Print hay | |||
End | |||
=Riferimenti= | |||
* https://linux.die.net/man/3/strstr | |||
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