, , , ,
- , , .
- , ( STL, ; ,
std::vector std::list std::deque). - , .
- , .
- , .
, , , , , , . , ( , /), ( ).
EDIT:
, . , , - - , . (, , .)
char* strreplace(const char* haystack, const char* needle, const char* replacement) {
std::deque<const char*> positions;
unsigned int haystacklen = strlen(haystack),
needlelen = strlen(needle),
replacementlen = strlen(replacement);
for (const char* cur = haystack, *pos = strstr(cur, needle); pos; cur = pos + 1, pos = strstr(cur, needle))
positions.push_back(pos);
char* newstr = new char[haystacklen + replacementlen * positions.size() + 1],
dst = newstr;
const char* src = haystack;
while (src <= haystack + haystacklen)
if (!positions.empty() && src == positions.front()) {
strcpy(dst, replacement);
dst += replacementlen;
src += needlelen;
positions.pop_front();
} else
*dst++ = *src++;
return newstr;
}
delete[] .
. , while, , positions.empty() , , , strcpy , , positions.empty() , . , , .
, std::list std::deque, , , .
ildjarn, list deque, size, , , O(1) ( O(n)) pre-++ 11, deque size .