Analizador de HTML en C/C++

HTML Parser es un programa/software mediante el cual se pueden extraer declaraciones útiles, dejando atrás las etiquetas html (como <h1>, <span>, <p>, etc.). 

Ejemplos:

Entrada: <h1>Geeks for Geeks</h1>
Salida: Geeks for Geeks 
Explicación : <h1> y </h1> abren y cierran etiquetas de encabezado, por lo que se analizaron dejando «Geeks for Geeks» como salida.

Entrada: <p> Geeks for Geeks</p>
Salida: Geeks for Geeks
Explicación : <p> y </p> abren y cierran etiquetas de párrafo, por lo que se analizan y el analizador ignora el carácter de espacio, dejando «Geeks for Geeks». ” como salida.

Enfoque: Deje que la string de entrada sea S de tamaño N. Siga los pasos a continuación para resolver el problema:

  • Declare dos variables , start y end para señalar el punto inicial y final de la declaración.
  • Recorra la string , S usa la variable iy si S[i] es igual a ‘>’, actualice la variable de inicio a i+1 y salga del ciclo .
  • Elimine los espacios en blanco desde el principio ejecutando un bucle mientras S[start] es igual a ‘ ‘ e incremente la variable de inicio en 1 en cada iteración.
  • Nuevamente, recorra la string, S desde el inicio usando la variable i y si S[i] es igual a ‘<‘, actualice el final a i-1 y salga del ciclo.
  • Ejecute un ciclo e imprima los caracteres de la string S en el rango [inicio, fin].

HTML Parser

A continuación se muestra la implementación del enfoque anterior en lenguaje C :

// C program for the above approach
  
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
  
// Function to parse the HTML code
void parser(char* S)
{
    // Store the length of the
    // input string
    int n = strlen(S);
    int start = 0, end = 0;
    int i, j;
  
    // Traverse the string
    for (i = 0; i < n; i++) {
        // If S[i] is '>', update
        // start to i+1 and break
        if (S[i] == '>') {
            start = i + 1;
            break;
        }
    }
  
    // Remove the blank spaces
    while (S[start] == ' ') {
        start++;
    }
  
    // Traverse the string
    for (i = start; i < n; i++) {
        // If S[i] is '<', update
        // end to i-1 and break
        if (S[i] == '<') {
            end = i - 1;
            break;
        }
    }
  
    // Print the characters in the
    // range [start, end]
    for (j = start; j <= end; j++) {
        printf("%c", S[j]);
    }
  
    printf("\n");
}
  
// Driver Code
int main()
{
    // Given Input
    char input1[] = "<h1>This is a statement</h1>";
    char input2[] = "<h1>         This is a statement with some spaces</h1>";
    char input3[] = "<p> This is a statement with some @ #$ ., / special characters</p>         ";
  
    printf("Parsed Statements:\n");
  
    // Function Call
    parser(input1);
    parser(input2);
    parser(input3);
  
    return 0;
}
Producción:

Parsed Statements:
This is a statement
This is a statement with some spaces
This is a statement with some @ #$., / special characters

A continuación se muestra la implementación del enfoque anterior en lenguaje C++ :

// C++ program for the
// above approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to parse the
// HTML code
void parser(char* S)
{
    // Store the length of the
    // input string
    int n = strlen(S);
    int start = 0, end = 0;
  
    // Traverse the string
    for (int i = 0; i < n; i++) {
        // If S[i] is '>', update
        // start to i+1 and break
        if (S[i] == '>') {
            start = i + 1;
            break;
        }
    }
  
    // Remove the blank space
    while (S[start] == ' ') {
        start++;
    }
  
    // Traverse the string
    for (int i = start; i < n; i++) {
        // If S[i] is '<', update
        // end to i-1 and break
        if (S[i] == '<') {
            end = i - 1;
            break;
        }
    }
  
    // Print the characters in the
    // range [start, end]
    for (int j = start; j <= end; j++) {
        cout << S[j];
    }
  
    cout << endl;
}
  
// Driver Code
int main()
{
    // Given Input
    char input1[] = "<h1>This is a statement</h1>";
    char input2[] = "<h1>         This is a statement with  some spaces</h1>";
    char input3[] = "<p> This is a statement with some @ #$ ., / special characters</p>         ";
  
    cout << "Parsed Statements:\n";
  
    // Function Call
    parser(input1);
    parser(input2);
    parser(input3);
    return 0;
}
Producción:

Parsed Statements:
This is a statement
This is a statement with  some spaces
This is a statement with some @ #$., / special characters

Tiempo Complejidad :O(N)
Espacio Auxiliar : O(1)

Nota: este programa analiza solo una declaración a la vez.

Publicación traducida automáticamente

Artículo escrito por tejasx y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *