> Ну на счот всего этого ты прав, но просто я кинул не рил > кусок кода, а просто набросал, конешно в проге я удалю > потом то что создал с помощью new, а вообще, символов & не > очень много! это 100%!
Суть не в 100%, а в универсальности, на все случаи. Есть такое понятие - Code Reuse - вторичное использование (ну ладно, это не важно).
> Спасибо за твой код, по пробую его поюзать! если ты не > против! Пожалуйста конечно, но зачем обижать? :)))
пользуйся на здоровье, иначе не написал бы.
субж, если есть текст как char[0x100], желательно все одинаковые на слово, например, все знаки & заменить на слово "amp"
Желательно с помощью функций семейства str...
[C++] как заменить символ на слово23.05.01 12:52 Автор: PS Статус: Незарегистрированный пользователь
> субж, если есть текст как char[0x100], желательно все > одинаковые на слово, например, все знаки & заменить на > слово "amp" > Желательно с помощью функций семейства str...
1. Во первых, как ты понимаешь, в ограниченом буфере ты это не сделаешь. Придется пользоватся например realloc.
2. Во вторых - это не perl - одной, двумя функциями не обойдешся. Алгоритм примерно такой:
а. Ищеш начало искомого слова.
б. Копируешь все что до него в "резиновый" буфер.
в. Копируешь в "резиновый" буфер замену.
г. От конца искомого слова ищеш следующее. (б. или д.)
д. Копируешь остаток в "резиновый".
Проще не выйдет.
[C++] как заменить символ на слово23.05.01 19:53 Автор: kabanchik Статус: Незарегистрированный пользователь
Алгоритм хороший, но по моему возня с "резиновым" буфером не очень хорошая идея, если конечно речь не идет об жесткой экономии памяти.
я бы сделал так, если все знаки & заменить на слово "amp" :
если
char *src =(char*)malloc(0x100);
то
char* dst = (char*)malloc(0x100 * 3);
тут замена '&' на "amp"
.........
дальше
dts = (char*)realloc(dst, strlen(dst) + 1);
и буфер растягивать не надо по нескольку раз.
короче так (для строки - строкой, а для 1 символа еще проще):
Во-первых у тебя остается Memory Leak - это сразу видно, следи за комментариями обозначенным ^^^^^^^
> char code[0x5000], code2[0x5000], sz3[0x3000]; > > /*В переменной code содержится весь текст*/ > > char *sz = new char[0x3000]; ^^^^^^^^^^^^^^^^^^^ тут ты зарезервироал место и не высвободил, да и судя по коду, это тебе не к чему, можно было просто объявить char* sz;
> > UINT j = 0; > > if(strstr(code, "&")) > { > strcpy(code2, ""); > while(strstr(code, "&")) > { > j = (UINT)strstr(code, "&") - (UINT)code; > strncpy(sz3, code, j); > sz3[j] = 0; > strcat(code2, &sz3[0]); > strcat(code2, "amp"); > sz = strchr(code, '&')?strchr(code, '&') + 1:code; ^^^^^^^^^^^^^^^ вот тут ты меняешь адрес sz и теряешь возможность освободить память, поэтому строка char* sz = new char[0x3000]; не кчему.
> strcpy(code, sz); > } > strcat(code2, code); > } > > в переменной code2 обработанный текст > Можт я всё это не правильно сделал, но главное что этот код > работает!
Работать она вроде работает, хотя не пойму почему :-)))) шучу
Но ты видешь сколько у тебя лишних действий? в моем примере все делается "легким движением руки" и никакого мусора не остается в памяти.
и еще, для перестановки у тебя не хватит места, например весь текст у тебя полностью от и до "залит" символами '&', тогда как поступишь? Отсюда все сводится т "резиновому" буферу. Следует учитывать все случаи.
для солидного(коммерческого) кода тебе следует пересмотреть код, и к тому же у тебя данные собираются в переменную code2, а если у тебя в тексте вообще не будет символа '&', то code2 не понятно что будет в себе содержать. Хотя бы дописал так
Ну на счот всего этого ты прав, но просто я кинул не рил кусок кода, а просто набросал, конешно в проге я удалю потом то что создал с помощью new, а вообще, символов & не очень много! это 100%!
Спасибо за твой код, по пробую его поюзать! если ты не против!
[C++] не удачно24.05.01 18:40 Автор: kabanchik Статус: Незарегистрированный пользователь
> Ну на счот всего этого ты прав, но просто я кинул не рил > кусок кода, а просто набросал, конешно в проге я удалю > потом то что создал с помощью new, а вообще, символов & не > очень много! это 100%!
Суть не в 100%, а в универсальности, на все случаи. Есть такое понятие - Code Reuse - вторичное использование (ну ладно, это не важно).
> Спасибо за твой код, по пробую его поюзать! если ты не > против! Пожалуйста конечно, но зачем обижать? :)))
пользуйся на здоровье, иначе не написал бы.
[C++] как заменить символ на слово14.05.01 13:32 Автор: Raven Статус: Незарегистрированный пользователь
> субж, если есть текст как char[0x100], желательно все > одинаковые на слово, например, все знаки & заменить на > слово "amp" > Желательно с помощью функций семейства str...
С помощью одной ф-ии этого не сделать. Пользуйся ф-ми strchr, strcpy, srtcat
[C++] [C++] как заменить символ на слово14.05.01 14:31 Автор: myrmidon Статус: Незарегистрированный пользователь
протестировать негде ... и я не программирую на С, так что сами доведите до ума.. ноэтот вопрос решается именно так просто.....но давно практики не было...
[C++] Ты меня извини, но такого бреда я давно не видел...24.05.01 19:08 Автор: PS <PS> Статус: Elderman