En el mismo 
for se puede. Como ya esta muy largo y en vista que no ha podido solucionar con mucho éxito el problema le cedo este código para que realice sus pruebas.   
Código C++:
Ver original- #include <iostream> 
- #include <string> 
- using namespace std; 
-   
- int main(int argc, char** argv) { 
-     string str = "Hola mundo como estas"; 
-     char c = 'a'; 
-     string reemplazo; 
-     for (int i = 0; i < (int) str.length(); ++i) { 
-         if (str[i] == c) { 
-             reemplazo.assign(1, c); 
-             reemplazo.insert(1, "o"); 
-             reemplazo.insert(2, 1, c); 
-             str.replace(i, 1, reemplazo); 
-             i+=2;//Aquí esta el truco para impedir que el for sea infinito 
-         } 
-     } 
-     cout << str << endl; 
-     return 0; 
- }