Newsgroup: it.comp.lang.visual-basic
Titolo: [SFIDA] contare il numero di occorrenze di una sottostringa in una stringa

contare il numero di occorrenze di una sottostringa in una stringa
Sia dove$ che cosa$ sono stringhe di arbitraria lunghezza.
cosa$ deve essere almeno un carattere.
completare dove c'è "???"
Function contaoccorrenze(dove As String, cosa As String) As Long
 contaoccorrenze = ???
End Function
termoPilucco

C'é una libreria tipo "Micorosft Scripting...." che contiene un ottimo
motore di regular expression...
Lo so che può sembrare una cosa ostina, ma é ora di impararle... :)
                Ciao
                                                    Allanon
--
- SPAMKILLER
 L'indirizzo delle risposte é 
itlangv...@michele.sytes.net
 LASCIATE il NOSPAM fa parte dell'indirizzo :-)
  Per superare le impostazioni di protezione antispam scrivete
  nel testo del messaggio la scritta "SPAMKILLER"
Scusate il disturbo, ma non posso più di pubblicità

 Lo so che può sembrare una cosa ostina, ma é ora di impararle... :)
conosco le regular expressions dai tempi del PERL :)
Non è questo il senso della sfida.
termoPilucco

 End Function

 > End Function
Quasi!
Cosa succede se dove è una stringa vuota?
termoPilucco

> End Function
Bravo. In compenso con la scusa della sfida, pacioccando con la ricorsione
mi sono accorto di un comportamento strano:
Questa funziona va:
Function contaoccorrenze(dove As String, cosa As String) As Long
 If InStr(dove, cosa) > 0 Then
   contaoccorrenze = contaoccorrenze(Replace(dove, cosa, "", 1, 1), cosa) +
1
 Else
   contaoccorrenze = 0
 End If
End Function
Questa invece da Stack Overflow:
Function contaoccorrenze(dove As String, cosa As String) As Long
 contaoccorrenze = IIf(InStr(dove, cosa) > 0, contaoccorrenze(Replace(dove,
cosa, "", 1, 1), cosa) + 1, 0)
End Function
Perchč?
Ciao
*Roby*

 ha
scritto:

   contaoccorrenze = Ubound(Split(dove + cosa,cosa))-1
 End Function
--------------------------------
Inviato via 
http://usenet.libero.it

  End Function
perfetto!
termoPilucco.

 Perchč?
  Perchč la parte "vera" dell IIF viene chiamata anche quando la condizione č
falsa!!!
  In pratica SEMPRE.
Ciao


 Questa funziona va:
Io avrei fatto piů semplicemente cosě:
(senza provare)
Function Occorrenze(ByVal Stringa As String, ByVal SubString as string)as
string
    Occorrenze = Len(Stringa) - Len(Replace(Stringa, SubStringa, "")) _
                 \ len(subStringa)
End function
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 In pratica SEMPRE.
Fantastico. :-)
Ciao
*Roby*

 End function
Bella ^_^ Questa mi piace ! Chiara , matematica , ma con SubStringa a 0 si
avrebbe una DivisionByZero oppure "\" se la scampa ?

*termopilucco* ha scritto:

contaoccorrenze = Ubound(Split(dove,cosa)) * Sgn(Len(s))


  Manca qualcosina...


 avrebbe una DivisionByZero oppure "\" se la scampa ?
Non c'č problema: l'ipotesi era che SubStringa č <>""
Al limite Stringa poteva essere =""
termoPilucco

 Al limite Stringa poteva essere =""
Come "al limite"???
E' condizione prevista e quindi da rispettare.
Ora, pervaso da senso di onnipotenza dilagante, chi fa meglio di me? (post
recentissimo)
Ok, lo so, sono in bassa... e ho bisogno di false considerazioni.
Nessuno mi caga più, tutti invocano la cameriera e Lord non pubblica la mia,
che posso fare se non giocherellare?
Ahhh, potrei cambiare nick, mail, faccia e donne e rientrare con altra
personalità. Lo farò.

 personalità. Lo farò.
lol
termoPilucco

 lol
No, niente lol, lo farò!

 la mia, che posso fare se non giocherellare?
Lord ieri ha cambiato scheda madre al suo PC (chipset nforce una figata
pazzesca) con la conseguente necessità di reinstallare winzozz (win2k+cambio
controller HD = Blue Screen Of Death): in compenso ora ascolto tutto in
dolby digital O:-)
Si prevedono un paio di giorni di lunghi e noiosi setups prima di tornare
online! :-)
Btw io aspettavo la versione hires della "tua" cameriera! :D

 avrebbe una DivisionByZero oppure "\" se la scampa ?
Function Occorrenze(ByVal Stringa As String, ByVal SubString as string)as
string
    Dim lngStr as long
    Dim lngSubStr as long
    lngStr = Len(Stringa)
    lngSubStr = Len(SubStringa)
    if (lngstr = 0) or (lngSubStr = 0) then
        Occorrenze = (lngStr - Len(Replace(Stringa, SubStringa, ""))) _
                     \ lngSubStr
    end if
End function
Ciao

 string
... neanche questa hai provato, vero :-P

 ... neanche questa hai provato, vero :-P
Uff, quanto sei noioso :)
Function Occorrenze(ByVal Stringa As String, ByVal SubStringa As String) As
Long
    Dim lngStr As Long
    Dim lngSubStr As Long
    lngStr = Len(Stringa)
    lngSubStr = Len(SubStringa)
    If (lngStr + lngSubStr) <> (lngStr - lngSubStr) Then
        Occorrenze = (lngStr - Len(Replace(Stringa, SubStringa, ""))) _
                     \ lngSubStr
    End If
End Function
