Saturday 21 March 2009

HOJ ( acm.hdu.edu.cn ) 1088





#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;

enum token_type
{
WORD_,
TAG_,
SPACE_
};

token_type get_token_by_char(char ch)
{
if( ch==' ' || ch=='\t' || ch=='\n' )
{
return SPACE_;
}
else if ( ch=='<' )
{
return TAG_;
}
return WORD_;
}

void tell_curr_token(token_type token)
{
if(token==WORD_)cout<<"WORD"<<endl;
else if(token==TAG_)cout<<"TAG"<<endl;
else if(token==SPACE_)cout<<"SPACE"<<endl;
else cout<<(int)token<<endl;
}

void translate()
{
token_type curr_token;
char token_value[81]={0};
int token_len=0;
int line_len =0;
char ch;

//初始化
cin.get(ch);
curr_token=get_token_by_char(ch);
token_value[token_len++]=ch;

while(cin.get(ch))
{
// tell_curr_token(curr_token);
switch(curr_token)
{
case SPACE_:
if( ch==' ' || ch=='\t' || ch=='\n' )
{
token_value[token_len++]=ch;
}
else
{
if (line_len+1>=80)
{
cout<<"\n";
line_len=0;
}
else if(line_len>0)
{
cout<<" ";
++line_len;
}
token_len=0;
memset(token_value,0,81);
curr_token=get_token_by_char(ch);
token_value[token_len++]=ch;
}
break;
case TAG_:
if( ch=='>' )
{
if(!cin.get(ch))return;
if (! strcmp( token_value,"<br" ))
{
cout<<"\n";
line_len=0;
}
else
{
if (line_len>0) cout<<"\n";
for(int i=0;i<80;++i) cout<<'-';
line_len=0;
}
token_len=0;
memset(token_value,0,81);
curr_token=get_token_by_char(ch);
token_value[token_len++]=ch;
}
else
{
token_value[token_len++]=ch;
}
break;
case WORD_:
if( ch!=' ' && ch!='\t' && ch!='\n' && ch!='<' )
{
token_value[token_len++]=ch;
}
else
{
if (token_len+line_len>80)
{
cout<<"\n"<<token_value;
}
else
{
cout<<token_value;
line_len+=token_len;
}
token_len=0;
memset(token_value,0,81);
curr_token=get_token_by_char(ch);
token_value[token_len++]=ch;
}
break;
default:
cout<<"Something wrong!"<<endl;
system("pause");
return;
}
}
}

int main()
{
translate();
return 0;
}



No comments:

Post a Comment