4001 HTML解析

问题描述:
如果你在一台没有安装Netscape浏览器的Macintosh机器上,试着阅读一个html文档,那是件非常困难的事情。
你的任务是要编程实现一个小的html浏览器。要求显示输入文件的内容,你需要知道html的标签:<br>表示换行,<hr>表示水平线,另外还有制表符,空格和换行符。每行不超过80个字符。
输入:
    输入包括一个你要显示的内容文本。这个文本包括一些单词和HTML标签,它们由一个或多个空格、制表符或换行符分割开的。
一个单词是指由0个或多个字母、数字和标点符号组成的一个序列。例如,"abc,123" 是一个词,但是"abc, 123"是两个词,即"abc," and "123"(即以空格作为单词的分隔符).一个词不会超过81个字符,而且不会包含任何'<'或'>'符号。所有的HTML标签不是<br>就是<hr>。
输出:
你应该按照如下规则来显示输入的文本:
(1)    如果你读入的词,结果行没有超过80个字符,那么就显示它,否则换行显示。
(2)    如果你读入<br>标签,则开始一个新行。
(3)    如果你读入<hr>标签,则要在新一行中显示80个’-‘字符。
(4)    最后以一个换行作为结束。

输入样例

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.

代码(C语言版)

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int main(int argc, char *argv[]) {
	char str[100];
	int count=0;
	int len;
	while(scanf("%s",str)!=EOF){
		len=strlen(str);
		if(strcmp(str,"<br>")==0){
			printf("\n");
			count=0;
		}
		else if(strcmp(str,"<hr>")==0){
			if(count!=0) printf("\n");
			int i;
			for(i=0;i<80;i++)
				printf("-");
			printf("\n");
			count=0;
		}
			else{
				if(count+strlen(str)+1<=80){
					if(count==0) printf("%s",str);
					else printf(" %s",str);
					count+=strlen(str)+1;
				}
				else{
					printf("\n");
					count=0;
					printf("%s",str);
					count+=strlen(str);
				}
			}	
	}
	printf("\n");
	return 0;
} 

 还有一种

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h> 
void Printhr(){
	int i;
	for(i=0;i<80;i++) printf("-");
	printf("\n");
}
int main(int argc, char *argv[]) {
	char str[100];
	int count=0;
	int len;	
	while(scanf("%s",str)!=EOF){
		len=strlen(str);
		if(strcmp(str,"<br>")==0){
			printf("\n");
			count=0;
		}
		else if(strcmp(str,"<hr>")==0){
			if(count!=0) printf("\n");
			Printhr();
			count=0;
		}
			else{
				if(count+len+1>80){
				    count=0;
					printf("\n");
				}
				if(count!=0){
				    printf(" ");
					count++;
				}
			printf("%s",str);
			count+=len;	
			}
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值