2271:HTML

keyword

C++

概要

改行タグと水平線タグを含んだhtmlのコードが与えられる。1行80字以下になるように出力する問題。
実装ゲー。トークンの分割とかは相変わらず苦手。stream使えば楽なんだろうけど。

char token[90];
char line[90];

int main(){
    int n, p=0, i;

    while(scanf("%s",token) != EOF){
        if(token[0] == '\n' || token[0] == '\r'){
            continue;
        }
        n = strlen(token);
        if(!strcmp(token,"<br>")){
            if(p){
                line[p] = '\0';
                printf("%s",line);
                p = 0;
            }
            putchar('\r');
            putchar('\n');
        }
        else if(!strcmp(token,"<hr>")){
            if(p){
                line[p] = '\0';
                printf("%s\r\n",line);
                p = 0;
            }
            REP(i,80){
                putchar('-');
            }
            putchar('\r');
            putchar('\n');
        }
        else{
            if(p + n + (p?1:0) > 80){
                line[p] = '\0';
                printf("%s\r\n",line);
                REP(p,n) line[p] = token[p];
            }
            else{
                if(p) line[p++] = ' ';
                REP(i,n){
                    line[p++] = token[i];
                }
            }
        }
    }
    if(p){
        line[p] = '\0';
        printf("%s",line);
        p = 0;
    }
    printf("\r\n");

    return 0;
}