- 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 );
}
bormand 10.04.2013 12:30 # +1
roman-kashitsyn 10.04.2013 12:38 # +1
roman-kashitsyn 10.04.2013 12:57 # +2
1. Результирующую строку можно аллоцировать заранее без new, её размер известен. Или типа RVO, ололо?
2. Конечно, по строке нужно пройтись трижды: сначала забить её нулями (!), потом всё это переписать содержимым строки, и потом заменить свежескопированные символы. Круть.
3. Зачем выделять память в uint8, который потом кастится в int8_t, который, по счастливому совпадению, является разновидностью char?
bormand 10.04.2013 13:34 # +1
blackhearted 10.04.2013 13:39 # +2
После строки 14, кстати, лик.
lTemp не удалён :)
bormand 10.04.2013 13:40 # +2
roman-kashitsyn 10.04.2013 13:43 # +1
blackhearted 10.04.2013 13:44 # +1
bormand 10.04.2013 13:49 # +3
blackhearted 10.04.2013 15:31 # +1
roman-kashitsyn 10.04.2013 15:40 # +3
blackhearted 11.04.2013 10:11 # +1