Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica
Il nuovo gimbal mobile DJI evolve il concetto di tracciamento automatico con tre modalità diverse, un modulo multifunzionale con illuminazione integrata e controlli gestuali avanzati. Nel gimbal è anche presente un'asta telescopica da 215 mm con treppiede integrato, per un prodotto completo per content creator di ogni livello
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-05-2003, 07:03   #1
Kleidemos
Bannato
 
L'Avatar di Kleidemos
 
Iscritto dal: Nov 2002
Città: PV
Messaggi: 1210
[C++]Contare gli spazi

Dovrei contare gli spazi contenuti in una stringa e avrei pensato a questa funz:
Codice:
 
int Spazi(string &st)
{
    int spazi_cont;
    string::iterator it=st.begin();
    for( ; it != st.end(); it++) 
    {
        if( st.find(" ") != string::npos )
        {
        	spazi_cont++;           
        } 
        if( st.find("\0") != string::npos )
        {
                break;
        }    
    }  
    return spazi_cont;
}
Ma mi trova 30000 spazi
Kleidemos è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 08:52   #2
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
Codice:
int Spazi(string &st)
{
    int spazi_cont = 0;
    for(int i = 0; i < st.size(); i++)
    {
          if(st[i] == "")
               spazi_cont ++;
    }

    return spazi_cont;
}
ps: non l'ho testato...
ri è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 09:28   #3
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
Re: [C++]Contare gli spazi

Quote:
Originally posted by "Kleidemos"

Dovrei contare gli spazi contenuti in una stringa e avrei pensato a questa funz:
Codice:
 
int Spazi(string &st)
{
    int spazi_cont;
    string::iterator it=st.begin();
    for( ; it != st.end(); it++) 
    {
        if( st.find(" ") != string::npos )
        {
        	spazi_cont++;           
        } 
        if( st.find("\0") != string::npos )
        {
                break;
        }    
    }  
    return spazi_cont;
}
Ma mi trova 30000 spazi
una curiosità... ma l'iteratore string::iterator che hai usato ti dovrebbe permettere la scansione dei caratteri x come lo hai usato tu... premesso che non l'ho mai usato mi sembra di averne visto da qualche parte un uso di enumerazione di stringhe contenute in un vettore...
ripeto non entro nel merito, è solo una curiosità, vorrei capire meglio
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 10:21   #4
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Re: [C++]Contare gli spazi

Non e' molto piu' semplice qualcosa del genere (non testato) ?
Codice:
int Spazi(const string& st)
{
  int result=0;
  for ( string::const_iterator i=st.begin(); i != st.end(); ++i )
  {
    if ( *i == ' ' )
      ++result;
  }
  return result;
}
In ogni caso nel ciclo for non dovresti usare string::npos ma st.end() (ed e' per quello che ti da un risultato sballato)

Edit: ops, mi sono accorto che e' praticamente identico al codice di ri (a parte il " " corretto in ' ' )
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 10:27   #5
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Re: [C++]Contare gli spazi

Quote:
Originally posted by "monkey72"



una curiosità... ma l'iteratore string::iterator che hai usato ti dovrebbe permettere la scansione dei caratteri x come lo hai usato tu... premesso che non l'ho mai usato mi sembra di averne visto da qualche parte un uso di enumerazione di stringhe contenute in un vettore...
ripeto non entro nel merito, è solo una curiosità, vorrei capire meglio
Molto probabilmente string::iterator non e' altro che un altro nome per char*, e quindi usare uno o l'altro non dovrebbe far differenza.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 10:42   #6
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
Re: [C++]Contare gli spazi

Quote:
Originally posted by "/\/\@®¢Ø"


In ogni caso nel ciclo for non dovresti usare string::npos ma st.end() (ed e' per quello che ti da un risultato sballato)
xchè? lui sta testando se il carattere corrente è blank, xchè deve controllare che sia finita la stringa?... semmai nel secondo if, ma a che pro, xche string::npos gli fa sballare il risultato?
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 10:46   #7
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
p.s. marco secondo me sono giuste sia la tua soluzione che quella di ri, sono semplici ma efficaci, ma volevo capire xchè sballa quella di kleidemos
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:11   #8
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
perchè npos è una costante che rappresenta la lunghezza massima di una stringa
l'algoritmo find invece, in caso di "non trovato", restituisce l'end dell'oggetto

[CAZZATA, vedere sotto]prova a fare una stampa di string::npos e vediamo se ti esce 30000 [/CAZZATA]
ri è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:15   #9
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Re: [C++]Contare gli spazi

Quote:
Originally posted by "monkey72"



xchè? lui sta testando se il carattere corrente è blank, xchè deve controllare che sia finita la stringa?... semmai nel secondo if, ma a che pro, xche string::npos gli fa sballare il risultato?

porc... stamattina dormo della grossa ! .
Kleidemos, l'errore sta nel fatto che mescoli due modi di operare: da un lato fai la scansione 'manuale' della stringa col ciclo for (ma l'iteratore non lo utilizzi mai!), dall'altro utilizzi il metodo find che fa la scansione di suo: il metodo find cerca tutta la stringa e quindi e' inutile iterare. Il secondo find e' ancora piu' pericoloso: a differenza dei char* non e' necessariamente detto che le string finiscano con un '\0'. Se questo capita (come ad esempio nel gcc) in ogni caso il ciclo termina al primo passaggio perche' il '\0' viene trovato alla fine della stringa.
La soluzione e' quindi:
1- iteri
2- usi find

nel primo caso va bene il codice che ti e' gia' stato mostrato
nel secondo puoi fare cosi'
Codice:
int Spazi(const string &st)
{ 
    int spazi_cont=0;
    string::size_type pos = st.find_first_of( ' ' );
    while( pos != string::npos )
    {
        spazi_cont++;
        pos = st.find_first_of( ' ' , pos+1 );
    }
    return spazi_cont; 
}
(ho usato find_first_of invece che find visto che dovevo cercare un solo carattere, ma anche find sulla strigna andava bene cmq)
Pero' mi sembra una fatica inutile rispetto l'entita' del compito.
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:15   #10
ri
Senior Member
 
L'Avatar di ri
 
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061

ho appena controllato quanto vale quel const e mi da -1...
ri è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:16   #11
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
dimenticavo...
spazi_cont va inizializzato a zero !
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:20   #12
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
io sapevo che s.find(c) cerca la prima occorrenza del carattere c nella stringa s e che ritorna un valore intero senza segno che è la posizione di c se c'è, altrimenti ritorna una costante predefinita che è string::npos "non posizione" che vale -1
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:22   #13
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
Quote:
Originally posted by "ri"


ho appena controllato quanto vale quel const e mi da -1...
appunto....
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2003, 12:32   #14
monkey72
Senior Member
 
L'Avatar di monkey72
 
Iscritto dal: Dec 2001
Messaggi: 1385
Re: [C++]Contare gli spazi

Quote:
Originally posted by "/\/\@®¢Ø"




Codice:
int Spazi(const string &st)
{ 
    int spazi_cont=0;
    string::size_type pos = st.find_first_of( ' ' );
    while( pos != string::npos )
    {
        spazi_cont++;
        pos = st.find_first_of( ' ' , pos+1 );
    }
    return spazi_cont; 
}
non ho più obiezioni
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
monkey72 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Opera Neon: il browser AI agentico di nuova generazione Opera Neon: il browser AI agentico di nuova gene...
Snap e Perplexity unite: dal prossimo an...
La Cina dice addio a NVIDIA? Il governo ...
Microlino, simbolo italiano della mobili...
Apple disattiverà la sincronizzaz...
Google lancia l'allarme: attenzione ai m...
Primo test drive con Leapmotor B10: le c...
'Non può essere un robot': l'uman...
Monopattino elettrico Segway Ninebot Max...
Syberia Remastered è disponibile:...
Sony scopre che tutti i modelli AI hanno...
Amazon nasconde un -15% su 'Seconda Mano...
Due occasioni Apple su Amazon: iPhone 16...
Verso la fine della TV tradizionale? I g...
Cassa JBL a 39€, portatili, smartphone, ...
Cometa interstellare 3I/ATLAS: la sonda ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:41.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v