Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Macedo_153065

string.h e ordenacao

Recommended Posts

ola, estou tendo que fazer um codigo que deve fazer algo supostamente simples, que e encontar o titulo de uma noticia, e contar quantas palavras tem em sua descricao!

 

para isso eu estou usando 'strstr' para achar o titulo que esta entre tags, assim como a descricao! e estou usando o strtok para contar uma palavra quando ele acha , ou . ou < ou > , esta correto, nao esta?

 

agora, como eu faco para ele achar quando tem dois espacos consecutivos?

porque que eu usar a strstr e deixar dois espacos consecutivos em branco, acho que ele acha que eu nao digitei nada!

 

obrigado desde ja!

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que você realmente que fazer, especifique, por exemplo escreva como seria a sequencia de caracteres a ser analisada e as regras para a analise, como: <h1>Titulo 1</h1>, as palavras são separadas por espaços. Segundo este exemplo ficaria assim:

 

/*
*  Copyright 2012 Mateus G. Pereira
*
*  Este programa é um software livre; você pode redistribui-lo e/ou
*  modifica-lo dentro dos termos da Licença Pública Geral GNU como
*  publicada pela Fundação do Software Livre (FSF); na versão 2 da
*  Licença, ou (na sua opnião) qualquer versão.
*
*  Este programa é distribuido na esperança que possa ser  util,
*  mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO
*  a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a Licença
*  Pública Geral GNU para maiores detalhes.
*
*  Você deve ter recebido uma cópia da Licença Pública Geral GNU
*  junto com este programa, se não, escreva para a Fundação do Software
*  Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston,
*  MA  02110-1301 USA
*
*/

#include <stdio.h>
#include <ctype.h>

typedef enum {false = 0, true = 1} bool;

bool strmatch (const char* s1, const char* s2)
{
   while(*s2 != '\0')
       if(*s1++ != *s2++)
           return false;
   return true;
}

bool strtag (char* d, const char* s, const char* tag1, const char* tag2)
{
   while(true)
   {
       if(*s == *tag1)
       {
           if(strmatch(s, tag1))
           {
               break;
           }
       }
       else if(*s == '\0')
       {
           *d = '\0';
           return false;
       }
       s++;
   }

   while(*s == *tag1)
   {
       s++;
       tag1++;
   }

   while(*s != '\0')
   {
       if(*s == *tag2)
       {
           if(strmatch(s, tag2))
           {
               break;
           }
       }
       *d++ = *s++;
   }
   *d = '\0';
   return true;
}

int wordcount (const char* s)
{
   int count = 0;

   while(*s != '\0')
   {
       if(!isspace(*s))
       {
           count++;
           while(!isspace(*s) && (*s != '\0'))
               s++;
       }
       else
       {
           while(isspace(*s) && (*s != '\0'))
               s++;
       }
   }
   return count;
}

int main()
{
   char buffer[256],
   text[] = "<h1>Titulo 1: Teste da eficacia.</h1>\n" \
            "<h2>Titulo 2: O restante...</h2>Texto " \
            "não será contado.";

   // Supondo que as tags sejam: <h1>...</h1> e <h2>...</h2>
   strtag(buffer, text, "<h1>", "</h1>");
   printf("%s - Palavras: %d\n", buffer, wordcount(buffer));
   strtag(buffer, text, "<h2>", "</h2>");
   printf("%s - Palavras: %d\n", buffer, wordcount(buffer));
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.