首页 > ACM题库 > HDU-杭电 > HDU 1088 Write a simple HTML Browser-模拟-[解题报告]
2013
11-27

HDU 1088 Write a simple HTML Browser-模拟-[解题报告]

Write a simple HTML Browser

问题描述 :

If you ever tried to read a html document on a Macintosh, you know how hard it is if no Netscape is installed.
Now, who can forget to install a HTML browser? This is very easy because most of the times you don’t need one on a MAC because there is a Acrobate Reader which is native to MAC. But if you ever need one, what do you do?
Your task is to write a small html-browser. It should only display the content of the input-file and knows only the html commands (tags) <br> which is a linebreak and <hr> which is a horizontal ruler. Then you should treat all tabulators, spaces and newlines as one space and display the resulting text with no more than 80 characters on a line.

输入:

The input consists of a text you should display. This text consists of words and HTML tags separated by one or more spaces, tabulators or newlines.
A word is a sequence of letters, numbers and punctuation. For example, "abc,123" is one word, but "abc, 123" are two words, namely "abc," and "123". A word is always shorter than 81 characters and does not contain any ‘<’ or ‘>’. All HTML tags are either <br> or <hr>.

输出:

You should display the the resulting text using this rules:
  . If you read a word in the input and the resulting line does not get longer than 80 chars, print it, else print it on a new line.
  . If you read a <br> in the input, start a new line.
  . If you read a <hr> in the input, start a new line unless you already are at the beginning of a line, display 80 characters of ‘-’ and start a new line (again).
The last line is ended by a newline character.

样例输入:

Hallo, dies ist eine 
ziemlich lange Zeile, die in Html
aber nicht umgebrochen wird.
<br>
Zwei <br> <br> produzieren zwei Newlines. 
Es gibt auch noch das tag <hr> was einen Trenner darstellt.
Zwei <hr> <hr> produzieren zwei Horizontal Rulers.
Achtung       mehrere Leerzeichen irritieren

Html genauso wenig wie


mehrere Leerzeilen.

样例输出:

Hallo, dies ist eine ziemlich lange Zeile, die in Html aber nicht umgebrochen
wird.
Zwei

produzieren zwei Newlines. Es gibt auch noch das tag
--------------------------------------------------------------------------------
was einen Trenner darstellt. Zwei
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
produzieren zwei Horizontal Rulers. Achtung mehrere Leerzeichen irritieren Html
genauso wenig wie mehrere Leerzeilen.

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1088

题意:写一个html代码显示的程序。。。

mark:就是麻烦,没别的。各种PE。后来发现是只考虑了’ ‘和’\n’,忘记考虑’\t’。。。

代码:

# include <stdio.h>

int main ()
{
    int ch, cnt = 0, cc = 0 ;
    int flag = 0, end = 1 ;
    int i ;
    char buff[100] ;
//    freopen ("in.txt", "r", stdin) ;
//    freopen ("out.txt", "w", stdout) ;
    while (end)
    {
        ch = getchar () ;
        if (ch == EOF)
        {
            ch = ' ' ;
            end = 0 ;
        }
        if (flag == 0)
        {
            if (ch == ' ' || ch == '\n'||ch == '\t') continue ;
            else if (ch == '<') flag = 2 ;
            else{
                buff[cnt++] = ch ;
                flag = 1 ;
            }
        }
        else if (flag == 1)
        {
            if (ch == '<' || ch == ' '||ch == '\n'||ch == '\t')
            {
                if (ch == '<') flag = 2 ;
                else flag = 0 ;
                buff[cnt] = '\0' ;
                if (cnt + cc + 1 > 80){
                    putchar ('\n') ;
                    cc = cnt ;
                }
                else
                {
                    if (cc != 0)
                    {
                         putchar (' ') ;
                         cc++ ;
                    }
                    cc += cnt ;
                }
                printf ("%s",buff) ;
                cnt = 0 ;
            }
            else buff[cnt++] = ch ;
        }
        else if (flag == 2)
        {
        //    ch = getchar () ;
            if (ch == 'b')
            {
                putchar ('\n') ;
            }
            else //ch == 'h'
            {
                if (cc != 0)
                    putchar ('\n') ;
                for (i = 0 ; i < 80 ; i++)
                    putchar ('-') ;
                putchar ('\n') ;
            }
            flag = 0 ;
            cc = 0 ;
            cnt = 0 ;
            getchar () ;
            getchar () ;
        }
    }
    if (cc != 0) putchar ('\n') ;
    return 0 ;
}


,