>>хе-хе, ну на С++ это конечно здорово, но вот хорошо бы именно >>на С! ;) > >Да какие проблемы, если есть желание изобретать велосипед: > >#include <stdio.h> >#include <string.h> > >char * replace(const char * src, const char * delim, const char >* repl) >{ > char * start_pos=(char *)src; > char * end_pos=(char *)src; > char * dst_ret=NULL; > char * dst_tmp; > size_t dst_len=1; // For trailing NULLTerm > size_t bl_size=0; > > int need_brake=0; > > if ((dst_ret=calloc(1, 1))==NULL) > { > perror("replace::calloc"); > return NULL; > } > > while (1) > { > if ((end_pos=strstr(start_pos, delim))==NULL) > { > end_pos=(char *)src+strlen(src); > need_brake=1; > } > > bl_size=(end_pos-start_pos)+strlen(repl); > dst_len+=bl_size; > if ((dst_tmp=(char *)realloc(dst_ret, dst_len))==NULL) > { > if (dst_ret) free(dst_ret); > perror("replace::realloc"); > return NULL; > } > dst_ret=dst_tmp; > strncat(dst_ret, start_pos, bl_size-strlen(repl)); > > if (need_brake) break; > > strcat(dst_ret, repl); > start_pos=end_pos+strlen(delim); > } > > return dst_ret; >} > >int main(int argc, char ** argv) >{ > char str[100]="aaa\nbbb\r\nccc\n"; > char * str1; > char * str2; > > str1=replace(str, "\r\n", "<br>"); > if (str1==NULL) return 1; > > str2=replace(str1, "\n", "<br>"); > if (str2==NULL) > { > free(str1); > return 1; > } > > printf("[%s]\n", str); > printf("[%s]\n", str2); > > free(str1); > free(str2); > > return 0; >} > >Кое-что можно подоптимизировать (компилятор не станет кэшировать результаты strlen и подобных вещей, >неплохо бы самому), ну и конечно, можно ввести проверки на различные >ситуации "от дурака", но мы пока решим, что программер сам себе >не вредитель :) а shell не пойдёт? я тоже в данный момент занимаюсь этим на с у меня лучше получется поэтому заставлаю себя тоже самое делать на shell такие два скриптика один превратить txt файл в html второй сгенерировать простенький index.html полезно когда с инета скачаеш кучу html неудобно и медленно открывается из файл менеджера 1. text-to-html #!/bin/bash -x HEADER="<html> <head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\"> <title></title> </head> <body> <table width=100%> <tr> <td> <font size=4> <div align=\"justify\"> " FOOTER=" </div> </font> </td> </tr> </table> </body> </html> " HTML=".html" for f in *.txt do echo > "$f$HTML" "$HEADER" cat -E "$f" | sed -e "s/[$]/<br>/g" >> "$f$HTML" echo >> "$f$HTML" "$FOOTER" done 2. - generate-index #!/bin/bash HEADER="<html> <head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\"> <title></title> </head> <body> " FOOTER=" </body> </html> " echo >> gen-index.html "$HEADER" for f in [^index]*.htm* do echo >> gen-index.html "<a href=\"$f\">$f</a><br>" done echo >> gen-index.html "$FOOTER"
|