したがって、リンクされたリストに DNA 文字 (A、G、T、C) のチェーンがあり、次のようなファイルから読み取ることになっています。
I[tab] ATT\n
I[tab] ATC\n (etc)
L CTA
L CTG
V GTA
V GTG
F TTT
F TTC
..
ここで、単一の文字は、3 つの a、t、g、c の組み合わせから得られるものです。(AGT で) 開始する必要がある場所から開始する方法を理解しましたが、文字列を読み取り、ファイルと比較して一致するものを確認する方法を定式化することはできません。これは私がこれまでに持っているものです:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
char seq[300];
struct node* next;
} NODE;
int
main(int argc, char* argv[]){
int i, j=0;
FILE *fin, *fout, *fop;
char code1[300], code2[300], prot;
NODE *current, *first, *prev;
fin = fopen( argv[1], "r");
fout = fopen( argv[2], "w");
fop = fopen("codeoflife.txt", "r");
current = first = malloc (sizeof (NODE));
while( fscanf( fin, "%s", current -> seq) != EOF) {
for (i = 0; i < 300; i++){
if (current->seq[i] == 'a')
current->seq[i] = 'A';
else if (current->seq[i] == 't')
current->seq[i] = 'T';
else if(current->seq[i] == 'g')
current->seq[i] = 'G';
else if(current->seq[i] == 'c')
current->seq[i] = 'C';
}
if ( (current -> next = malloc ( sizeof(NODE) ) ) == NULL){
fprintf(fout, "Out of memory\nCan't add more DNA sequences\n");
return EXIT_FAILURE;
}
prev = current;
current = current -> next;
}
free(current)
prev->next = NULL;
current = first;
while(current->next != NULL){
for( i = 0; i < 300; i++){
if( current->seq[i] == 'A')
if( current->seq[i+1] == 'G')
if( current->seq[i+2] =='T'){
code1[j] = 'M';
while(fscanf(fop, "%c", &prot)) != EOF){
break;
}
if (i == 299)
strcpy ( current->seq, "None");
current = current->next;
}
return 0;
}