Captar substring [RESOLVIDO]

1. Captar substring [RESOLVIDO]

Ricardo
r_mil

(usa Ubuntu)

Enviado em 02/02/2012 - 14:58h

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. Re: Captar substring [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/02/2012 - 15:24h

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. Código?

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 02/02/2012 - 15:26h

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. Código

Ricardo
r_mil

(usa Ubuntu)

Enviado em 02/02/2012 - 15:34h

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

[code]
#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. Re: Captar substring [RESOLVIDO]

Ricardo
r_mil

(usa Ubuntu)

Enviado em 02/02/2012 - 17:37h

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. Função strstr

Ricardo
r_mil

(usa Ubuntu)

Enviado em 02/02/2012 - 17:42h

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


7. Variável não inicializada

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 02/02/2012 - 18:36h

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. Re: Captar substring [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 02/02/2012 - 19:22h

@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. Re: Captar substring [RESOLVIDO]

Ricardo
r_mil

(usa Ubuntu)

Enviado em 03/02/2012 - 14:15h

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. Inicialização

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 03/02/2012 - 15:13h

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. If em C

Ricardo
r_mil

(usa Ubuntu)

Enviado em 03/02/2012 - 15:53h

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. Re: Captar substring [RESOLVIDO]

Júlio Hoffimann Mendes
julio_hoffimann

(usa Ubuntu)

Enviado em 03/02/2012 - 16:15h

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.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts