Differenze tra le versioni di "Strstr ()"

Da Gambas-it.org - Wikipedia.
(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...")
 
 
(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 String 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 ''[[Strtok_()|strtok( )]]'':
 
 
  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 String
+
  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 String, __delim As String) As String
+
  Private Extern strtok(__s As Pointer, __delim As String) As Pointer
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
 
  Dim hay, ndl, sp, token As String
 
  Dim i As Integer
 
 
    
 
    
 +
  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 IsNull(token) = False
+
   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(Null, sp)
+
     token = strtok(0, sp)
 
   Wend
 
   Wend
 
    
 
    
   Print "Parole che contengono i caratteri '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 ''[[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
 
    
 
    
  '''End'''
+
  Print hay
 +
 
 +
  End
 +
 
 +
 
 +
 
 +
=Riferimenti=
 +
* https://linux.die.net/man/3/strstr

Versione attuale delle 15: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


Riferimenti