Problema parser HTML

Ciao,
sto cercando di risolvere il problema parser HTML ma, nonostante l’output corretto ottenuto eseguendo il codice in locale, totalizzo 0 sul correttore.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char s[1000000];
int n;

void elimina(int da)
{
    int i;
    
    for(i=da; i<n-5; i++)
        s[i]=s[i+4];
    n=n-5;
}

void check()
{
    int i;
    
    for(i=0; i<n-4; i++)
    {
        if(s[i]=='&'&&s[i+1]=='a'&&s[i+2]=='m'&&s[i+3]=='p'&&s[i+4]==';')
        {
			elimina(i+1);
            check();
            return;
        }
    }
}


void leggi(char* stringa)
{
	int i;
	for(i=0; i<n-1; i++)
	{
		scanf("%c", &stringa[i]);
	}
	stringa[n]='\0';
}


main()
{
    
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
	scanf("%d", &n);
    getchar();
    leggi(s);
    check();
    
    s[n]='\0';
    
    printf("%s", s);
}

Manca in output la lunghezza della nuova stringa dopo l’elaborazione :sweat_smile:

1 Mi Piace

Anche dopo aver aggiunto la stampa non funziona (in locale mi sembra che funzioni correttamente…)

    #include<stdio.h>
#include<stdlib.h>
#include<string.h>

char s[1000000];
int n;

void elimina(int da)
{
    int i;
    
    for(i=da; i<n-5; i++)
        s[i]=s[i+4];
    n=n-4;
}

void check()
{
    int i;
    
    for(i=0; i<n-4; i++)
    {
        if(s[i]=='&'&&s[i+1]=='a'&&s[i+2]=='m'&&s[i+3]=='p'&&s[i+4]==';')
        {
			elimina(i+1);
            check();
            return;
        }
    }
}


void leggi(char* stringa)
{
	int i;
	for(i=0; i<n-1; i++)
	{
		scanf("%c", &stringa[i]);
	}
	stringa[n]='\0';
}


main()
{
    freopen("output.txt", "w", stdout);
	freopen("input.txt", "r", stdin);
	scanf("%d", &n);
    getchar();
    leggi(s);
    check();
    
    s[n-1]='\0';
    printf("%d\n", n);
    int i;
    for(i=0; i<n; i++)
    	printf("%c", s[i]);

}

Manca il terminatore di riga alla fine del file di output:

• Il file termina (come sempre) con un carattere “a capo”, che è però compreso negli N caratteri
totali.

4 Mi Piace

Il carattere " a capo " è questo → \n

s[n-1]=‘\n’;

^-^
Con questa soluzione realizzi 70 / 100