- 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 );
}
1. Результирующую строку можно аллоцировать заранее без new, её размер известен. Или типа RVO, ололо?
2. Конечно, по строке нужно пройтись трижды: сначала забить её нулями (!), потом всё это переписать содержимым строки, и потом заменить свежескопированные символы. Круть.
3. Зачем выделять память в uint8, который потом кастится в int8_t, который, по счастливому совпадению, является разновидностью char?
После строки 14, кстати, лик.
lTemp не удалён :)