마크 다운은 간단한 포맷 변환 HTML을 달성하는 데 필요한.
주로 문자열 처리. 기호가있는 문자의 내부 출력 블록을 분할 된 각 블록에 빈 라인 (\ 인쇄 \의 _buf의 \) , 달성 스트레스로 중첩 된 하이퍼 링크는, 순환 적으로 구현 될 수있다.
scanf와의 %로 ^ n 개의 &이 기능은 문자와 일치하지 않을 때 달성 getchar가 빈 줄을 입력, 작동하지 않는 \합니다. 즉, \ (BUF [] \) [0] '\ 0'을하지 않습니다 buf를 그대로 ","이되지 않습니다. 따라서, 빈 줄은 scanf와의 리턴 값을 시작 할 필요가 결정된다. scanf와 리턴 값 성공 일치의 숫자이므로, 그것은 널이 아닌 값을 반환하고, 빈 행 값이 0 반환, 반환 값은 -1 입력의 끝 (EOF).
가능한 경우 라인 또는 당신은 표준 입력 기능 buf_sz buf를하고는 fgets를 사용하여, 거대한를 입력합니다. 또한 개행 문자열을 읽을이 기능은, 빈 라인 만 [0]인지 '\ n을'buf를 판단 할 것으로 판단된다. 후속 처리가 문자열 인 경우 '\ N-' '대체'\ 0 '더 나은 것입니다.
#include <bits/stdc++.h>
using namespace std;
void print_buf(char buf[])
{
for (int i = 0; buf[i] != '\0'; i++)
{
if (buf[i] == '_')
{
int j = i + 1;
for (; buf[j] != '_'; j++);
char tmp_buf[105];
strcpy(tmp_buf, buf + i + 1);
tmp_buf[j-i-1] = '\0';
printf("<em>");
print_buf(tmp_buf);
printf("</em>");
i = j;
}
else if (buf[i] == '[')
{
char text[105], link[105];
int j = i + 1;
for (; buf[j] != ']'; j++);
strcpy(text, buf + i + 1);
text[j-i-1] = '\0';
i = j + 1;
j = i + 1;
for (; buf[j] != ')'; j++);
strcpy(link, buf + i + 1);
link[j-i-1] = '\0';
printf("<a href=\"");
print_buf(link);
printf("\">");
print_buf(text);
printf("</a>");
i = j;
}
else
{
printf("%c", buf[i]);
}
}
}
int main()
{
char buf[105];
int tmpblk = -1; // 0 p 1 h 2 ul
while (fgets(buf, 105, stdin) != NULL)
{
if (buf[0] == '\n')
{
if (tmpblk == 2)
printf("</ul>\n");
else if (tmpblk == 0)
{
printf("</p>\n");
}
tmpblk = -1;
}
else
{
buf[strlen(buf)-1] = '\0';
if (buf[0] == '#')
{
tmpblk = 1;
int h_num = 0;
int i = 0;
for (; buf[i] == '#'; i++)
h_num++;
for (; buf[i] == ' '; i++);
printf("<h%d>", h_num);
print_buf(buf + i);
printf("</h%d>\n", h_num);
}
else if (buf[0] == '*')
{
if (tmpblk == 2)
{
int i = 1;
for (; buf[i] == ' '; i++);
printf("<li>");
print_buf(buf + i);
printf("</li>\n");
}
else
{
tmpblk = 2;
int i = 1;
for (; buf[i] == ' '; i++);
printf("<ul>\n");
printf("<li>");
print_buf(buf + i);
printf("</li>\n");
}
}
else
{
if (tmpblk == 0)
{
printf("\n");
print_buf(buf);
}
else
{
tmpblk = 0;
printf("<p>");
print_buf(buf);
}
}
}
}
if (tmpblk == 2)
printf("</ul>\n");
else if (tmpblk == 0)
{
printf("</p>\n");
}
return 0;
}