PDA

View Full Version : [C++]Eliminare punteggiatura


Luc@s
19-12-2003, 21:27
void filter(string * s)
{
string el("().;");
string::iterator It = el.begin();
while(It != el.end())
{
string::size_type pos = 0;
while(pos = s->find_first_of(*It, pos) != string::npos) {
s->erase(pos, 1);
}
}
}



Come mai mi va in loop infinito?

xybercom
19-12-2003, 22:39
Magari It++ nel primo ciclo while potrebbe essere utile...

Luc@s
20-12-2003, 07:28
Originariamente inviato da xybercom
Magari It++ nel primo ciclo while potrebbe essere utile...


va sempre il loop:cry:

/\/\@®¢Ø
20-12-2003, 09:51
first_find_of cerca il primo carattere tra quelli presenti in una stringa, non occorre quindi che lo
chiami con ogni carattere (tra l'altro lui si aspetta una stringa, non un carattere).
Il ciclo piu' esterno e' quindi inutile (usa find_first_of(el,pos))
Inoltre erase esiste in due versioni:
con un parametro per eliminare un solo carattere o con due, dove passi due iteratori.
Il tuo '1' quindi viene interpretato come un iteratore e non una lunghezza, e probabilmente
l'errore sta li'.
Infine queste funzioni operano con iteratori e non pos_type, quindi devi dichiarare il pos
come

string::iterator pos = s->begin()

Se non ti e' stato segnalato nessun errore e' perche' molto probabilmente per le stringhe gli iteratori sono implementati come puntatori a carattere mentre i pos_type come (unsigned?) integer e il linguaggio non si fa tanti problemi a convertire l'uno nell'altro.
(suggerimento: attivare sempre il massimo livello di warning nel compilatore, questi problemi te li segnala di solito)