作业——HDOJ1088

题目类别——水题

题目描述:

        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.

【分析】

   本题属于字符串处理问题,因此,需要导入字符串函数库——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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值