Differenze tra le versioni di "Strstr ()"
Da Gambas-it.org - Wikipedia.
Riga 38: | Riga 38: | ||
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==== | ||
+ | Per sostituire un carattere all'interno di una stringa con la funzione esterna " ''strstr( ) " dovremo usare i ''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''' | '''End''' |
Versione delle 17:24, 30 mar 2018
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 String 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