#include <stdio.h>
#include <string.h>
int main (void){
char tag[128];//enough?
char tag_r[128];
char text[1024] = "";//enough? or dynamic array like as vector
int text_pos = 0;
int ch;
enum { OUT, IN };
int status = OUT;
scanf("%127s %127[^\n]%*c", tag, tag_r);
while((ch = getchar())!=EOF){
if(status == OUT){
putchar(ch);
if(ch == '<')
status = IN;
} else {//if(status == IN){
if(ch == '>'){
size_t len = strcspn(text, " \t\n");
if(len && strncmp(text, tag, len)==0){//match start tag(insufficient rigor), ignore case?
printf("%s", tag_r);
printf("%s", text + len);
} else if(text[0]=='/' && strcmp(text+1, tag)==0){//match end tag
printf("/%s", tag_r);
} else {
printf("%s", text);
}
text[text_pos=0]=0;
putchar(ch);
status = OUT;
} else {
text[text_pos++] = ch;//check omitted
text[text_pos] = 0;
}
}
}
if(text_pos)//invalid syntax
printf("%s", text);
return 0;
}
[DEMO] (http://ideone.com/OvHNaW) – BLUEPIXY
@ WOw У меня есть некоторые dificult, чтобы выяснить, что происходит здесь: «Len && strncmp (текст, теги, длина) == 0 ' Я также заинтересован в том, чтобы сделать эту идею более общей, поэтому я хочу полностью ее понять – Franks
как можно адаптировать этот код для нескольких записей? Спасибо – Franks