Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[C++] как заменить символ на слово 23.05.01 19:53 Число просмотров: 1190
Автор: kabanchik Статус: Незарегистрированный пользователь
|
Алгоритм хороший, но по моему возня с "резиновым" буфером не очень хорошая идея, если конечно речь не идет об жесткой экономии памяти.
я бы сделал так, если все знаки & заменить на слово "amp" :
если
char *src =(char*)malloc(0x100);
то
char* dst = (char*)malloc(0x100 * 3);
тут замена '&' на "amp"
.........
дальше
dts = (char*)realloc(dst, strlen(dst) + 1);
и буфер растягивать не надо по нескольку раз.
короче так (для строки - строкой, а для 1 символа еще проще):
char* replace(const char* src, const char* replStr, const char* replWith)
{
int lenSrc = (int)strlen(src);
int lenStr = (int)strlen(replStr);
int lenWith= (int)strlen(replWith);
int lenDst = (lenSrc / lenStr) * lenWith +lenSrc - (lenSrc / lenStrt) * lenStrt; // максимум возможный
char *dst = (char*)malloc(lenDst + 1);
const char *start = src;
char *temp = dst;
char *end;
while ((end = strstr(start, replStr)) != NULL)
{
memcpy(temp, start, end - start);
temp += end - start;
strcpy(temp, replWith);
temp += (int)lenWith;
start = end + (int)lenSrt;
}
strcpy(temp, start);
dst = (char*)realloc(dst, strlen(dst) + 1);
return dst;
}
|
|
|