题目描述:
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).
输入样例:
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.
【分析】
本题属于字符串处理问题,因此,需要导入字符串函数库——string.h,使用库中函数strcmp()进行两个字符串的相等比较,strlen()获取字符串中的字符个数(不包括结束字符'\0')——字符串长度。参考代码如下:
#include<stdio.h>
#include<string.h>
int main(){
//变量sum用来统计每一行字符的个数
char s[100],c,sum = 0;
while(scanf("%s",s)!=EOF){
if(strcmp(s,"<br>")==0){
printf("\n");
sum=0;
}else if(strcmp(s,"<hr>")==0){
if(sum!=0){
printf("\n");
}
int i;
for(i = 1;i<=80;i++){
printf("-");
}
printf("\n");
sum=0;
}else{
if(sum==0){
printf("%s",s);
sum=strlen(s);
}else{
//判断尾加入的字符串长度与现有字符串长度之后是否超过一行字符个数上限
//判断时多加一个1,用来记录尾加入的字符串与现有字符串之间添加的空格符
if(sum+strlen(s)+1<=80){
printf(" %s",s);
sum+=strlen(s)+1;
}else{
printf("\n");
printf("%s",s);
sum=strlen(s);
}
}
}
}
printf("\n");
return 1;
}