Jump to content
AprendizZ

Separação por linha vazia!

Recommended Posts

AprendizZ

Caros amigos,

Tenho andado às voltas com um problema que não estou a conseguir resolver.

Pretendo verificar o número de ocorrências detectadas numa lista de palavras inseridas, separadas em blocos por linhas vazias.

Ora essa verificação terá de ser executada quando termina cada bloco.

Passo a exemplificar:

3

sargo
sardinha
dourada
besugo
dourada
dourada
dourada
besugo
bica
besugo
sardinha
sardinha
dourada
dourada
carapau
besugo
besugo

paulo
nuno
paula
joao
joao
joana
francisco de sa
nuno
nuno
telma
telmo
francisco de sa
paulo

cao
andorinha
perdiz
galo
galinha

A primeira linha mostra quantos blocos são, depois cada bloco começa por uma linha vazia. A verificação do número de ocorrências é feito em cada bloco é feita antes da linha vazia do bloco seguinte (espero não ter sido confuso, pois eu já estou).

Ora não sei como verificar uma linha vazia e como implementar a separação dos blocos.

Qualquer ajuda é bem-vinda e eu agradeço desde já.

Share this post


Link to post
Share on other sites
brunoais

com scanf basta verificar quando é que ele devolve 0 num scan linha a linha.

Se devolver 0 significa que leu 0 caracteres que significa que é um linha em branco

Algo do tipo:

if(scanf("%[^\n]",&thing)){
// Linha normal com informação
}else{
// Linha em branco
}


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
AprendizZ

Até já sei como verificar a existência de linhas em branco, mas mesmo assim não estou a conseguir separar os blocos.

O código que fiz até ao momento é:


void conta_nomes(FILE *f)
{
char nomes [LEN];
quantos = 0;
while (fgets (nomes,LEN,f) != NULL)
{
	remove_ultimo(nomes);
	if (strlen(nomes) != 0)
	{
		quantos++;
		<coloca numa tabela de dispersão e faz os cálculos>;
	}
	else  // se linha vazia
	{
		break;
	}
}
}

void teste_problema (FILE *f, FILE *g)
{
char linha[LEN] ;
int testes, i;
fgets (linha,LEN,f);
remove_ultimo(linha); //remove último carater da cadeia '\0'
testes = atoi(linha);
fgets (linha,LEN,f);
for (i = 0;i < testes;i++)
{
	conta_nomes(f);
	<print dos resultados do bloco por fprintf>;
}
}

Sinceramente não estou a ver como saltar o problema. Help!

Share this post


Link to post
Share on other sites
brunoais

usa um booleano (int q pode ter o valor 0 ou 1). Com isso podes criar um sistema de separação.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.