|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
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;
}
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
Re: [C++]Contare gli spazi
Quote:
ripeto non entro nel merito, è solo una curiosità, vorrei capire meglio
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
|
|
|
|
|
|
|
#4 |
|
Bannato
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;
}
Edit: ops, mi sono accorto che e' praticamente identico al codice di ri (a parte il " " corretto in ' ' |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: [C++]Contare gli spazi
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
Re: [C++]Contare gli spazi
Quote:
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
|
|
|
|
|
|
|
#7 |
|
Senior Member
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"
|
|
|
|
|
|
#8 |
|
Senior Member
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 |
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
Re: [C++]Contare gli spazi
Quote:
porc... 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;
}
Pero' mi sembra una fatica inutile rispetto l'entita' del compito. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Feb 2003
Città: fra casa e lavoro
Messaggi: 1061
|
ho appena controllato quanto vale quel const e mi da -1... |
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
|
dimenticavo...
spazi_cont va inizializzato a zero ! |
|
|
|
|
|
#12 |
|
Senior Member
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"
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
Quote:
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
|
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2001
Messaggi: 1385
|
Re: [C++]Contare gli spazi
Quote:
__________________
lui è il mio amore: "tesò domani ti regalo un guinzaglio lungo 100 km"
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:41.



















