Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Calcolare occorrenze di una stringa in un brano

    Dunque il problema e' questo : devo realizzare un documento che conta interattivamente il numero di occorrenze di una stringa in un brano. il documento ha 3 campi, un area di testo in cui scrivere il brano, un campo inbut dove inserire la stringa ed un'area dove visualizzare il risultato.

    Ora, tralasciando l'html che non mi interessa il problema e' questo : io so trovare un carattere all'interno di una stringa ( con substr(i,1)) , ma non ho la minima idea di come trovare una parola all'interno di una stringa.

    codice:
    function stringa (a,b){
             contaOcc = 0 ;
             var i = 0 ;				 
             while ( i < a.length ){
    	if ??????????????????????????????????? 
                 contaOcc = contaOcc * 1 + 1 ;
                 i++ ;
    	}
             return contaOcc ; 
    }
    Questo era piu o meno l'idea che mi ero fatto. A e' la stringa ( il brano inserito ) e B e' la stringa da ricercare nel brano.
    Il punto e' quello di prima ; quando incremento il contatore di occorrenze mi manca la condizione per farlo. Fosse stato un carattere avrei messo if ( a.substr(i,1) == b ) , ma ora devo cercare una stringa. Non posso dire if a.substr(i,1) , perche mi ricercherebbe il carattere : al posto di 1 dovrei mettere x, ossia la dimensione della stringa da cercare, che pero' e' determinata sulla lunghezza di b ....

  2. #2
    No no un momento sono un babbeo, bastava mettere in pratica quello che avevo detto :

    codice:
    function stringa (a,b){
             contaOcc = 0 ;
             var x = b.length ;
             var i = 0 ;
             while ( i < a.length ){
    		 if (a.substr(i,x) == b)
    		 contaOcc = contaOcc * 1 + 1 ;
    		 i++ ;
    		 }
             return contaOcc ; 
    }
    Cosi mi funziona !!!!

  3. #3
    [QUOTE][b]
    codice:
    contaOcc = contaOcc * 1 + 1 ;
    Ma perchè complicar(gli) la vita, al motore Javscript?

    Non bastave un semplice:
    codice:
    contaOcc++ ;
    ... o no?

    Ciao!
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  4. #4
    Giusto !!

  5. #5
    Originariamente inviato da homezappa
    Ma perchè complicar(gli) la vita, al motore Javscript?
    è quello che mi domando anche io ...
    codice:
    function stringa(a,b){return --a.split(b).length};
    ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    eh lo so che tutti questi esecizi si possono risolvere in maniera piu breve, ma purtroppo devo utilizzare per forza dei cicli

    cmq grazie, lo split non lo conoscevo mica

  7. #7
    Originariamente inviato da ezechiele2
    eh lo so che tutti questi esecizi si possono risolvere in maniera piu breve, ma purtroppo devo utilizzare per forza dei cicli
    altrimenti sparano ? :master:

    scusa ma non ho capito perchè ... ci sono diversi modi di cercare un'occorrenza, tu hai scelto uno dei peggiori (per prestazioni e dispendio di risorse, non per logica che potrebbe anche andare ... a grandi linee)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Perche questi sono tutti esercizi presi da un ( pessimo ) libro dove alla fine di ogni capitolo vengono proposti alcuni quesiti che vanno pero' risolti con le sole " cose " messe a disposizione sino a quel momento, e purtroppo il docente vuole che uno si attenga al testo senza inserire cose " in piu ".

    Lo trovo assurdo pure io, ma non ci posso far niente.

    p.s : lo split cmq l'ho trovato ( dopo diversi capitoli ) , e' sicuramente la scelta migliore

  9. #9
    lo split usato per questo problema è un "trick" puramente scripting ... per avere qualcosa di più pulito e didattico potresti usare questa
    codice:
    function stringa(a, b){
    	var	i = -1,		// Int32 
    		tot = 0;	// UInt32
    	while(
    		// assegnazione inline, possibile anche con il C
    		(i = a.indexOf(b, i + 1))
    
    	!== -1)	// occorrenza non trovata
    		tot++;		// incremento
    
    	// risultato
    	return tot;
    };
    riprodotta identica in versione ciclo for in questo modo
    codice:
    function stringa(a, b){
    	for(var i = -1, tot = 0; (i = a.indexOf(b, i + 1)) !== -1; tot++);
    	return tot;
    };
    entrambe si basano sul metodo dell'oggetto stringa indexOf, che non so se l'hai ancora fatto ma è il metodo ufficiale per trovare proprio occorrenze di una stringa all'interno di un'altra.

    Io mi promuoverei da solo
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.