Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
Linux: Logo Logo cataclysm no meu pc
Por removido
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Comunidades

Captar substring [RESOLVIDO]

[1] Enviado em 02/02/2012 - 14:58h Captar substring [RESOLVIDO]
Linux user: Ricardo
r_mil

(usa Ubuntu)


Olá pessoal, sou iniciante em programação, e estou com um problema pequeno, mas que não consigo resolver de jeito nenhum: preciso de capturar uma sbstring de tamanho variável e colocá-la num outro vetor, posteriormente imprimindo-a na tela.

As strings que tenho são estas aqui:

>gi|290467408|ref|NC_013896.1|
>gi|224589800|ref|NC_000001.10|
>gi|241864931|ref|NC_012602.1|
>gi|224589812|ref|NC_000020.10|
>gi|224589822|ref|NC_000023.10|
>gi|241025160|ref|NW_002981436.1|
>gi|89059078|ref|NT_113961.1|
>gi|289734501|ref|NW_003187719.1|
>gi|90787117|ref|NW_001125506.1|

Eu preciso pegar a parte final, imediatamente depois do "ref". As saídas então devem ser:

|NC_013896.1|
|NC_000001.10|
|NC_012602.1|
|NC_000020.10|
|NC_000023.10|
|NW_002981436.1|
|NT_113961.1|
|NW_003187719.1|
|NW_001125506.1|


Acho que estou errando nos laçcos de repetição, não consigo executar a cópia de maneira correta.

Alguém pode me ajudar?!



Forte abraço,





Ricardo.


 

  


[2] Enviado em 02/02/2012 - 15:24h Re: Captar substring [RESOLVIDO]
Linux user: ???
gokernel

(usa Conectiva)


Tente assim para o primeiro teste:


char *p = strstr(">gi|89059078|ref|NT_113961.1|", "ref");
if(p)
{
      p+=3;
      printf("%s\n", p);
}



 

[3] Enviado em 02/02/2012 - 15:26h Código?
Linux user: Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)


Boa tarde Ricardo,

Mostre o código que você tentou para que possamos corrigir ou indicar uma melhor solução. ;-)

Por favor, utilize as tags do fórum: [ code] [/ code] sem espaços.

Abraço!

 

[4] Enviado em 02/02/2012 - 15:34h Código
Linux user: Ricardo
r_mil

(usa Ubuntu)


Exemplo de código, mas que está apresentando falha de segmentação.


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

void main(){



  char num[50];
  char s[50];
  
  char c;
  char h;
  int i = 0;
  int j = 0;
  int a = 0;
  
  // abrindo arquivo onde estao as strings a serem lidas //
  fabre = fopen ("teste.fasta", "r+");
  
  do {
    fgets (num, 50, fabre);

    if (c == '>'){ // linhas que não começam pelo indicador, não tem a string desejada //
      
      // substitui a parte inicial da string com o caracter '&' //
      for (i = 0; i < 50; i++){
         h = num[i];
         num[i] = '&';
         if ((h == 'f')){
            break;
            }        
         }
  
        // transfere para o vetor 's' a parte final da string //
        for (i = 0; i < 50; i++){
            if (num[i] != '&'){
              s[j] = num[i];
              printf ("%c", s[j]);
              j++;
              if (s[i] == '{TEXTO}'){
               break;
               }
              }
            }

[code/]

Não consigo saber onde está errado.
              
              
              
              
              
              
              

 

[5] Enviado em 02/02/2012 - 17:37h Re: Captar substring [RESOLVIDO]
Linux user: Ricardo
r_mil

(usa Ubuntu)


E com esse trecho, ele consegue pegar o final da string, mas repete a letra f mais de 10 vezes...



        for (j = 0; j < 30; j++){
           for (i = 0; i < strlen (num); i++){
              num[i] = num[i+1];
              if (num[i] == 'f'){
              break;
              }
            }
        }
        printf ("\n%s\n", num);
        


 

[6] Enviado em 02/02/2012 - 17:42h Função strstr
Linux user: Ricardo
r_mil

(usa Ubuntu)


Gokernel, não consegui melhorar os resultados com a função strstr....

 

[7] Enviado em 02/02/2012 - 18:36h Variável não inicializada
Linux user: Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)


Oi Ricardo,

Desculpe a demora, estava ausente.

O primeiro erro que vejo no seu código está no teste:


if ( c == '>' )


Você não inicializou essa variável e o GCC deve estar lhe mostrando um warning.

Lendo rapidamente, você parece estar fazendo uma coisa completamente diferente do que foi proposto. Provavelmente está tendo erros de falha de segmentação por conta do literal 50, como você mesmo disse, as strings têm tamanho variável, não é possível acessar sempre 50 caracteres.

Corrija esses erros e volte com uma versão mais trabalhada, pense melhor no que cada laço está fazendo, preferivelmente imprimindo cada etapa. ;-)

Boa sorte!

 

[8] Enviado em 02/02/2012 - 19:22h Re: Captar substring [RESOLVIDO]
Linux user: ???
gokernel

(usa Conectiva)


@r mil:
"Gokernel, não consegui melhorar os resultados com a função strstr...."

Aquele parte que demonstrei é só para pegar o final de um string logo apos "ref" ...como você queria.

O "p" é a parte final do string logo apos "ref".



 

[9] Enviado em 03/02/2012 - 14:15h Re: Captar substring [RESOLVIDO]
Linux user: Ricardo
r_mil

(usa Ubuntu)


Então Júlio, a variável 'c' está inicializada como 'char', bem no início do código.
As strings tem tamanho menor que 50, todas elas.... esqueci de dizer isto no post anterior.
Mesmo assim está dando pau... não estou conseguindo entender.


Brigadão pela força!


 

[10] Enviado em 03/02/2012 - 15:13h Inicialização
Linux user: Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)


Oi Ricardo,

char c;


Essa linha define a variável: o compilador reserva memória na pilha e no caso particular do tipo char, inicializa a variável com 0.

Portanto, o teste if (c == '>') nunca será satisfeito. Em momento algum você altera o valor armazenado em c.

Aconselho que comece o programa do zero, tenha em mente que o objetivo é extremamente simples:

Dada uma string, encontre o penúltimo '|'.


Em C++ bastam 3 linhas de código.

 

[11] Enviado em 03/02/2012 - 15:53h If em C
Linux user: Ricardo
r_mil

(usa Ubuntu)


Então Júlio, eu não entendo bem a sintaxe do 'if'... dei uma olhadinha rápida aqui na internet, mas só encontrei exemplos com números. Como fica a sintaxe para o meu caso, verificando a exsitência de um caracter?!


Vlw!

 

[12] Enviado em 03/02/2012 - 16:15h Re: Captar substring [RESOLVIDO]
Linux user: Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)


r_mil escreveu:

Então Júlio, eu não entendo bem a sintaxe do 'if'... dei uma olhadinha rápida aqui na internet, mas só encontrei exemplos com números. Como fica a sintaxe para o meu caso, verificando a exsitência de um caracter?!


Vlw!


A sintaxe está correta, a lógica é que está errada. Como eu disse antes, comece o programa do zero, pense.

 

  
<< Primeira | Anterior Próxima | Última >>
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.