Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Samuel Nobukuni de Bello

Comparação de vetores de char

Recommended Posts

Boa noite galera, estou com uma dúvida em um algorítimo, na hora de comparar uma posição em um vetor de char com outra posição de outro vetor de char

Segue abaixo o algoritimo:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main()
{
    char cadeia[16];
    int i;
    char aux;
    char padrão[3];
    
//fornecimento do padrão
for(i=0; i<=3;i++){
    printf("Entre com a letra do padrão na pos. %d!\n",i+1);
    scanf("%c",&aux);
    fflush(stdin);
    if ((aux!='A') && (aux!='G') && (aux!='T') && (aux!='C')){
    printf("Caracter invalido, favor digitar novamente\n");
i--;
    }
    else{
    padrão[i]==aux;
    }    
    }
        
//preenchimento do vetor da cadeia de DNA
    for(i=0; i<16;i++){
    printf("Entre com a letra correspondente da cadeia na pos. %d!\n",i+1);
scanf("%c",&aux);
fflush(stdin);
    if ((aux!='A') && (aux!='C') && (aux!='G') && (aux!='T')){
    printf("Caracter invalido, favor digitar novamente\n");
i--;
    }
    else{
    cadeia[i]==aux;
    }    
    }
 
//verificação 
    for (i=0; i<12; i++){
    //printf("Yo\n");
    if (cadeia[i]==padrão[0]) && (cadeia[i+1]==padrão[1]) && (cadeia[i+2]==padrão[2]) && (cadeia[(i+3)]==padrão[3])){
    printf("padrão identificado a partir da posicao &d\n",i);
    }
}
    return 0;
}
O erro está no if de //verificação, ele não consegue comparar, alguém ai sabe o que têm de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Jogue fora a conio.h.

 

Não se usa fflush na entrada padrão. Leia o tópico fixo desse fórum.

 

Vc não está atribuindo; vc está fazendo uma comparação:

 

padrão[i]==aux;

 

 

#include <stdio.h>
#include <ctype.h>
#define MAX_PADRAO 3
#define MAX_DNA 16
 
void leitura(char * dst, int tam) {
   int i;
   char tmp;
   for(i=0; i<tam; i++) {
      printf("Informe a %da letra:", i+1);
      scanf("%c", &tmp);
      if (toupper(tmp) == 'A' || toupper(tmp) == 'C' || toupper(tmp) == 'G' || toupper(tmp) == 'T') {
         dst[i] = toupper(tmp);
      } else {
         puts("Letra inválida. Apenas 'A', 'C', 'G' e 'T' são aceitas.");
         continue;
      }
   }
}
 
 
int main(void) {
   char padrao[MAX_PADRAO];
   char DNA[MAX_DNA];
 
   puts("Leitura da cadeia de DNA...");
   leitura(DNA, MAX_DNA);
 
   puts("Leitura do padrão...");
   leitura(padrao, MAX_PADRAO);
 
   int pattern_pos = strstr(DNA, padrao);
   if (pattern_pos == NULL) {
      puts("Padrão não encontrado.");
   } else {
      printf("Padrão na posição %d.\n", int(pattern_pos - DNA));
   }
   return 0;
}

 

OBS: Fiz meio rápido e sem compilador disponível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Iris pela atenção, ao tentar executar o seu algoritimo ele apresentou o seguinte erro: Invalid conversion from 'char*' to 'int' [-fpermissive]

na linha abaixo:

int pattern_pos = strstr(DNA, padrao);
if (pattern_pos == NULL) {
puts("Padrão não encontrado.");
} else {
printf("Padrão na posição %d.\n", int(pattern_pos - DNA));
}

Você poderia me explicar o que é esse erro e como eu resolvo ele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Possivelmente é por causa do int(pattern_pos - DNA), que aliás, escrevi como se estivesse programando em Python... Troque por (int)(pattern_pos - DNA).

 

Se vc usou o -fpermissive, então o compilador não está tratando isso como erro e sim como warning, e compilando do mesmo jeito, já que essa flag normalmente é utilizada p/ códigos que não estão em conformidade com as regras.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.