Jump to content

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


Edelf
 Share

Recommended Posts

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  😛

Link to comment
Share on other 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).

Link to comment
Share on other 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

Link to comment
Share on other 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...).

Link to comment
Share on other 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  😛

Link to comment
Share on other 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++;
     }
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.