- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 
std::string StringUtilities::replace(const std::string& strValue,
                                     uint8_t piWhat,
                                     uint8_t piWith)
{  
  size_t len = strValue.length();
  uint8_t* lTemp = new uint8_t[len + 1];
  memset(lTemp, '\0', len + 1); //+ 1 for \0
  memcpy(lTemp, strValue.c_str(), len);
  for (size_t i = 0; i < len; i++)
  {
    if (lTemp[i] == piWhat)
      lTemp[i] = piWith;
  }
  return string( (int8_t*) lTemp );  
}
                                
 Follow us!
1. Результирующую строку можно аллоцировать заранее без new, её размер известен. Или типа RVO, ололо?
2. Конечно, по строке нужно пройтись трижды: сначала забить её нулями (!), потом всё это переписать содержимым строки, и потом заменить свежескопированные символы. Круть.
3. Зачем выделять память в uint8, который потом кастится в int8_t, который, по счастливому совпадению, является разновидностью char?
После строки 14, кстати, лик.
lTemp не удалён :)