【CCF】 Markdown 模拟
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> using namespace std; const int maxn=1e2+2; char str[maxn]; void line(int l,int r){ int i=l; while(str[i]=='#'||str[i]=='*'||str[i]==' ') i++; while(i<=r){ if(str[i]=='_'){ i++; int x,y; x=i; while(str[i]!='_') y=i,i++; i++; printf("<em>"); line(x,y); printf("</em>"); }else if(str[i]=='['){ i++; int l1,r1,l2,r2; l1=i; while(str[i]!=']') r1=i,i++; i+=2; l2=i; while(str[i]!=')') r2=i,i++; i++; printf("<a href=\""); line(l2,r2); printf("\">"); line(l1,r1); printf("</a>"); }else{ printf("%c",str[i]); i++; } } } void title(){ int len=strlen(str); len--; int i; for(i=0;i<len;i++){ if(str[i]!='#') break; } printf("<h%d>",i); line(0,strlen(str)-2); printf("</h%d>\n",i); } void unlist(){ printf("<ul>\n"); printf("<li>"); line(0,strlen(str)-2); printf("</li>\n"); while(fgets(str,maxn,stdin)!=NULL){ if(str[0]=='\n') break; printf("<li>"); line(0,strlen(str)-2); printf("</li>\n"); } printf("</ul>\n"); } void para(){ printf("<p>"); line(0,strlen(str)-2); while(fgets(str,maxn,stdin)!=NULL){ if(str[0]=='\n'){ break; } printf("\n"); line(0,strlen(str)-2); } printf("</p>\n"); } int main(){ while(fgets(str,maxn,stdin)!=NULL){ if(str[0]=='\n') continue; if(str[0]=='#'){ title(); }else if(str[0]=='*'){ unlist(); }else{ para(); } } return 0; }