PDA

Visualizza la versione completa : [c++ stl]replace


giuseppe500
05-10-2009, 00:44
ciao.
ho questo codice trovato su google


strText.replace(0,strText.length(), bind2nd(std::equal_to<char>(), '_'), '.');

, solo che il compilatore(vs 2008) mi da' il seguente errore:
Errore 2 error C2664: 'std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::replace(unsigned int,unsigned int,const _Elem *,unsigned int)' : cannot convert parameter 3 from 'std::binder2nd<_Fn2>' to 'const char *'

dove sbaglio? :cry:

MItaly
05-10-2009, 11:48
Ma fare semplicemente

strText.replace(0,strText.length(), '_', '.');
?

giuseppe500
07-10-2009, 20:06
ho provato
strText.replace(0,strText.length(), '_', '.');
ma cosi' non mi funziona, strText è = a tex_jpg e dopo il replace è = a "..........".

perchè questi punti?

shodan
07-10-2009, 20:38
Il problema è che non esiste un overload di std::string::replace() che accetti due caratteri in input, e il penultimo viene interpretato come intero.

http://msdn.microsoft.com/en-us/library/0b7cc0ss%28VS.80%29.aspx

Hai due strade:
1) strText.replace(strText.find('_'),1,1,'.');

2) std::replace(strText.begin(),strText.end(),'_','.' );

P.S.
Occhio che NON fanno la stessa cosa.

giuseppe500
07-10-2009, 21:03
in questo modo pero' credo che faccia il replace della prima occorrenza , come faccio se voglio sostituire piu' di un occorrenza del carattere?
Grazie.

shodan
07-10-2009, 21:10
Metodo 2

Loading