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/libr...8VS.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.