杭电ACM——1088

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.


代码如下:

# include <iostream>
# include <string>
using namespace std;

int main()
{
	string word;
	int count = 0, len;//count用于判断每行的总单词长度 包括空格
	while(cin >> word)
	{
		if (word == "<br>")//若发现 <br> 则换行 并将新行的总单词长度置为0
		{
			count = 0;
			cout << endl;
		}
		else if (word == "<hr>")//若发现 <hr> 判断是否为空行 若不为空行 则先换行 再将新行的总单词长度置为0 并输出若干个'-'
		{
			if (count > 0)
			{
				cout << endl;
				count = 0;
			}
			cout << "--------------------------------------------------------------------------------" << endl;
		}
		else
		{
			len = word.length();//测量当前输入的单词的长度
			count += len;//本行总单词长度增加
			if (count + 1 > 80)//若发现此单词插入后总单词长度超过80 则将该单词置于下一行
			{
				cout << endl << word;
				count = len;
			}
			else//若该行仍能插入单词(即加上该单词的长度后总单词长度未超过80)
			{
				if (count > len)//测量是否为首个单词 若不是首个单词 则先输出一个空格
				{
					cout << ' ';
				}
				cout << word;
				count++;//因为输出了一个空格 所以总单词长度自增1
			}
		}
	}
	cout << endl;//最坑的地方 最后输出后记得换行

	return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值