POJ 2271 HTML

题目大意:

        要求翻译一篇HTML文档,文档中只有两种HTML标记<br>和<hr>,分别表示换行和划线板,并将左右连续的空格、制表符、换行符当做一个空格输出,还有就是"abc,123"算作一个单词,而"abc, 123"算作两个单词,分别为"abc,"和"123",具体要求为:

        1. 当读取一个单词,当前行不超过80个字符(包括空格),就直接打印在后面(注意单词直接用空格隔开),否则就另起一行在开头处打印该单词,所有单词的最大长度为80;

        2. 当读取<br>时直接开启一新行;

        3. 当读取<hr>时,如果<hr>不在新行开头就另起一行连续打印80个'-'后再开启一新行;

        4. 全部翻译完后用一个空行结束;

题目链接

注释代码:

/*                     
 * Problem ID : POJ 2271 HTML
 * Author     : Lirx.t.Una                     
 * Language   : C           
 * Run Time   : 0 ms                     
 * Run Memory : 156 KB                     
*/ 

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

//maximum number of characters per line
//每行单词的最大数量
#define	MAXNCHPL	80

char	w[MAXNCHPL + 1];//word,存放单词

int
main() {

	int		cnt;//count,计数当前行中字符的个数
	int		wl;//word length,单词的长度

	int		i;

	cnt = 0;
	while ( ~scanf("%s", w) ) {
	
		if ( !strcmp(w, "<hr>") ) {
		
			if ( cnt ) {

				putchar('\n');
				cnt = 0;//换行后新一行的字符数量清空
			}
			
			//若已经在新一行开始处则直接打印'-'
			i = MAXNCHPL;
			while ( i-- )
				putchar('-');
			putchar('\n');

			continue;
		}

		if ( !strcmp(w, "<br>") ) {
		
			putchar('\n');
			cnt = 0;

			continue;
		}

		wl = strlen(w);

		if ( !cnt ) {//如果在一个新行开始处
		
			printf("%s", w);//则直接打印该单词
			cnt = wl;//并将当前行的单词数置为单词长度

			continue;
		}

		if ( cnt + wl + 1 > MAXNCHPL ) {//如果已经在行中间位置,并且
			//加上当前单词后超出行限80个字符
		
			printf("\n%s", w);//则需另起一行在开始处打印
			cnt = wl;//同样需要跟新当前行字符数
		}
		else {
		
			printf(" %s", w);//否则就直接打印,注意和前一个单词中间空一格
			cnt += wl + 1;//注意累加字符数的时候需要把空格加上
		}
	}
	putchar('\n');//完成后打印一个空行作为结束标志

	return 0;
}

无注释代码:

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

#define	MAXNCHPL	80

char	w[MAXNCHPL];

int
main() {

	int		cnt;
	int		wl;

	int		i;

	cnt = 0;
	while ( ~scanf("%s", w) ) {
	
		if ( !strcmp(w, "<hr>") ) {
		
			if ( cnt ) {

				putchar('\n');
				cnt = 0;
			}
			
			i = MAXNCHPL;
			while ( i-- )
				putchar('-');
			putchar('\n');

			continue;
		}

		if ( !strcmp(w, "<br>") ) {
		
			putchar('\n');
			cnt = 0;

			continue;
		}

		wl = strlen(w);

		if ( !cnt ) {
		
			printf("%s", w);
			cnt = wl;

			continue;
		}

		if ( cnt + wl + 1 > MAXNCHPL ) {
		
			printf("\n%s", w);
			cnt = wl;
		}
		else {
		
			printf(" %s", w);
			cnt += wl + 1;
		}
	}
	putchar('\n');

	return 0;
}

单词解释:

Macintosh:苹果的一款老式的计算机

Netscape:美国网景公司,也只网景浏览器

native:n, 本地,与生俱来的,内置的

linebreak:n, 换行符

horizontal:adj, 水平的

ruler:n, 划线,划线板,尺子

tabulator:n, 制表符

newline:n, 换行符

namely:adv, 也就是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值