Problem:
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.
Input:
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>.
Output:
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.
Sample Input:
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.
Sample Output:
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.
Solution:
// 声明:本代码仅供学习之用,请不要作为个人的成绩提交。
// email: bitrain@hotmail.com
#include <iostream>
#include <string>
using namespace std;
int main( void ) {
string text;
int colCount = 0;
while ( cin >> text ) {
if ( text == "<br>" ) {
cout << endl;
colCount = 0;
} else if ( text == "<hr>" ) {
if ( colCount > 0 ) {
cout << endl;
}
cout << "----------------------------------------"
<< "----------------------------------------"
<< endl;
colCount = 0;
} else {
int length = text.length( );
if ( colCount > 0 ) {
if ( colCount + length > 79 ) {
cout << endl;
colCount = 0;
} else {
cout << " ";
++colCount;
}
cout << text;
colCount += length;
} else {
if ( colCount + length > 80 ) {
cout << endl;
colCount = 0;
}
cout << text;
colCount += length;
}
}
}
cout << endl;
return 0;
}