• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

SBringer

Remover tags da string

14 mensagens neste tópico

Olá Pessoal,

char stringTotal[MAX] = "[hmm]teste[.hmm];

stringTotal = retirar_tags(stringTotal,"hmm");

printf("%s", stringTotal);

Queria criar a função retirar_tags(char string_total[], char tag[]) que retire a tag e o a string que fecha a tag ("[.tag]"), de modo que o printf printasse "teste".

Já pesquisei no forum e no google mas não encontrei nada que me desse uma ajuda.

Alguém pode ajudar? Obrigado desde já  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
char retirar_tags(char string_total[], char tag[])
{
int i,cmp=0;
char newstring[];
cmp=strlen(string_total); // tamanho
for (i=0;i<cmp;i++)
....
// depois vais passar para a newstring as cenas sem a tag... o que não é muito dificil 
return newstring;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela dica Voltriz mas não há nenhuma maneira mais eficiente que a comparação caracter a caracter?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela dica Voltriz mas não há nenhuma maneira mais eficiente que a comparação caracter a caracter?

isso já não sei...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado na mesma. Eu tinha pensado na função strstr() mas não sei muito bem como implementá-la aqui. Se alguém pudesse dar uma dica...  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tens razão é muito mais eficiente com essa função!

/* strstr example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="This is a simple string";
  char * pch;
  pch = strstr (str,"simple");
  strncpy (pch,"sample",6);
  puts (str);
  return 0;
}

This example searches for the "simple" substring in str and replaces that word for "sample".

no teu caso substituis o [tag[]] e o [.tag[]] pelo vazio '/0' na string_total... não sei se deu para perceber

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado!

O '/0' não sinaliza o final da string? Se eu colocar um '/0' no inicio da string depois não me vai dar problemas com as funções da biblioteca string.h?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado!

O '/0' não sinaliza o final da string? Se eu colocar um '/0' no inicio da string depois não me vai dar problemas com as funções da biblioteca string.h?

tens razão, o '/0' é usado para sinalizar o final da string...

talvez alguém com mais experiência passe aqui para nos ajudar :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A string começa e acaba sempre com a tag?

Se isso acontecer, pelo comprimento da tag (que pode ser determinado através dos argumentos da função retirar_tags) sabes logo a posição dos caracteres que precisas de copiar para uma nova string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pegando na ideia do rui carlos:

char retirar_tags(char st[],char tag[])
{
int tamtag=0,tamst=0,i,j=0;
char newstring[MAX];
tamtag=strlen(tag);
tamst=strlen(st);
for(i=(tamtag+2);i<(tamst-(tamst+3));i++)
{newstring[j]=st[i];
j++;
}
return newstring;
}

talvez isto dê

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens pelo menos um erro na condição de paragem do ciclo...

aqui  "i<(tamst-(tamst+3))" ?

EDIT: tens razão  :wallbash:

eu queria por isto  "i<(tamst-(tamtag+3))"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok pessoal. Acho que a partir daqui já sei. Obrigado Voltriz e Rui Carlos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora