Plataforma: URI (BEECROWD)
Problema: 3140
Linguagens: C e C+.
Enunciado:
Durante a pandemia, com a suspensão temporária do calendário acadêmico na UFSC, Lucas tem aproveitado o tempo livre para fazer vários cursos online e aprender a usar novas tecnologias e bibliotecas de programação.
Recentemente ele participou de um bootcamp gratuito sobre o uso de Node.js e da biblioteca ReactJS e ficou apaixonado. Ele gostou tanto que ele decidiu portar um site que ele havia criado em HTML para esse novo formato.
Para sorte de Lucas, ele pode reaproveitar boa parte dos scripts em HTML, mas algumas partes deixam de ser necessárias, já que o Node.js e + ReactJS passam a gerá-las automaticamente. Como são vários arquivos para ele analisar e dar control+c, control+v nos códigos, ele gostaria da sua ajuda para agilizar o processo.
Dado um arquivo em HTML, você deve escrever um programa que retorne apenas o conteúdo que esteja entre as tags "<body>" e "</body>", todo resto deve ser ignorado.
Como o Lucas é um cara caprichoso, o código está devidamente indentado. Nas linhas de abertura e fechamento da tag body não há mais nada além da própria tag e os espaços de indentação.
Solução: Neste exercício era necessário reproduzir somente o que estava dentro do body de uma página HTML, ou seja, após o texto "<body>" e antes de "</body>", assumindo que a página foi criada dentro dos padrões da W3C. Nas duas soluções (C e C++) utilizei estruturas condicionais para procurar pelas expressões "<body>" e "</body>" e, quando encontrasse a primeira, escreveria o conteúdo até encontrar "</body>". Quando encontrasse o "</body>" a ação seria interromper, saindo do laço de repetição e encerrando o programa. Foi criada uma variável de controle que é alterada quando "<body>" é encontrado, assim o algoritmo sabe que pode imprimir o conteúdo. Veja abaixo as soluções.
#include <stdio.h> #include <string.h> int main() { char linha[1100]; int escreve = 0; while (fgets(linha, sizeof(linha), stdin) != NULL) { if (strstr(linha, "</body>") != NULL) break; if (escreve) printf("%s", linha); if (strstr(linha, "<body>") != NULL) escreve = 1; } return 0; }
#include <iostream> #include <string> using namespace std; int main() { string linha, openTag = "<body>", closeTag = "</body>"; bool escreve = false; while(getline(cin, linha)) { if (linha.find(closeTag) != string::npos) break; if (escreve) cout << linha << endl; if (linha.find(openTag) != string::npos) escreve = true; } return 0; }
Nenhum comentário:
Postar um comentário