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

Edelf

[Resolvido] nº de vezes que cada char aparece numa string

7 mensagens neste tópico

Boas ppl!

tenho uma duvida talvez basica talvez estupida lol

è o seguinte:

quero fazer uma funçao que dada uma string, por expl:

"ATGCAAGTGCC"

retorna o nº de vezes que cada char aparece numa string, por expl;

A-3

T-2

G-3

C-3

a pergunta é se existe alguma funçao predefinida que o faça?

PS: estou a dar os 1ºs passos em C  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se forem só esses 4 chars (eu sei que são lol), basta associar cada um deles a um contador, tipo:

A - cA

T - cT

e depois percorres a string até ao fim e, para cada caracter, verificas se é um dos 4. Se for incrementas o contador associado à respectiva letra.

Talvez em vez de fazeres uma função que verifique todos de uma vez, fazes uma função genérica que recebe como parâmetros, a string do DNA e o caracter pelo qual queres procurar e invocas essa função 4 vezes (1 para cada base azotada: A,T,G,C).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fiz isto;

int contarLetra (char string[]){ 
int i,j, contador = 0; 
for (j=0;(string[j]!='\0');j++){
for(i=0 ;(string[i]!='\0'); i++)
	{if (string[i] == string[j]) contador++; }
return (contador); 
}
}

testando a funçao:

contarLetra("abababasdca")

resultado:

5

onde está mal?

PS: quem és?lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebeste bem o que quis dizer. O que eu estava a dizer era para fazeres uma função que recebe uma string (cadeia de DNA) e um char (letra que corresponde a uma base azotada) e conta quantas vezes esse char aparece na string. Tipo fazias essa função genérica e depois na main fazias 4 invocações dessa função: uma para cada letra.

Para a função, apenas tens de inicializar o contador a 0 e depois ir percorrendo a string e fazendo comparações caracter a caracter (entre o caracter da string e a letra da base azotada) através de um if, e sempre que a condição do if se verificar incrementas o contador.

Depois na main fazes isto:

contarLetra(dna,'A');

contarLetra(dna,'T');

etc.

---------------------------

Sou um gajo bué de mau da praxe (whoever you are...).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebeste bem o que quis dizer. O que eu estava a dizer era para fazeres uma função que recebe uma string (cadeia de DNA) e um char (letra que corresponde a uma base azotada) e conta quantas vezes esse char aparece na string. Tipo fazias essa função genérica e depois na main fazias 4 invocações dessa função: uma para cada letra.

Para a função, apenas tens de inicializar o contador a 0 e depois ir percorrendo a string e fazendo comparações caracter a caracter (entre o caracter da string e a letra da base azotada) através de um if, e sempre que a condição do if se verificar incrementas o contador.

Depois na main fazes isto:

contarLetra(dna,'A');

contarLetra(dna,'T');

etc.

---------------------------

Sou um gajo bué de mau da praxe (whoever you are...).

sim eu sei...eu percebi...so que agora fiquei com curiosidade em saber como se fazia uma funçao geral...para tds as letras...

PS: ja fiz a funçao...mas acho que vou ter que seguir a forma que estava a fazer inicialmente (funcao geral) para a questao seguinte  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para a forma geral tens de passar nos parâmetros da função as 4 variáveis que vão guardar o nº de vezes que cada letra aparece na string (têm de ser apontadores para não perderes os seus valores no fim da execução da função):

#include <stdio.h>

void contarLetra(char *dna,int *b1,int *b2,int *b3,int *b4);

int main() {
    char dna[]="ATGCAAGTGCC";
    int b1=0,b2=0,b3=0,b4=0;
    contarLetra(dna,&b1,&b2,&b3,&b4);
    printf("A: %d\nT: %d\nG: %d\nC: %d\n",b1,b2,b3,b4);
    return 0;
}

void contarLetra(char *dna,int *b1,int *b2,int *b3,int *b4) {
     while (*dna!='\0') {
           switch (*dna) {
                case 'A': *b1+=1;
                          break;
                case 'T': *b2+=1;
                          break;
                case 'G': *b3+=1;
                          break;
                case 'C': *b4+=1;
                          break;
                }
     dna++;
     }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou então crias uma função com a assinatura int contaLetra(char* s, char c) que devolve o número de vezes que o caracter c aparece na string s.

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