2015-03-22 3 views
-7

Надеется, что вы можете дать мне некоторый свет на это:TAG замены C строка

У этой записи:

BODY 
10 
<><BODY garbage>body</BODY> 

поэтому я должен заменить все тег в <> и сделать вывод выглядеть следующим образом:

<><10 garbage>body</10> 

любые идеи? спасибо!

ответ

0
#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; 
} 
+0

[DEMO] (http://ideone.com/OvHNaW) – BLUEPIXY

+0

@ WOw У меня есть некоторые dificult, чтобы выяснить, что происходит здесь: «Len && strncmp (текст, теги, длина) == 0 ' Я также заинтересован в том, чтобы сделать эту идею более общей, поэтому я хочу полностью ее понять – Franks

+0

как можно адаптировать этот код для нескольких записей? Спасибо – Franks

Смежные вопросы