gpt4 book ai didi

用C计算文本文件中完整基因的数量

转载 作者:行者123 更新时间:2023-11-30 17:57:04 25 4
gpt4 key购买 nike

我想使用C语言计算文本文件中基因的数量,三元组是一组3个字母。基因由包含开始和结束的三联体序列组成。

基因的开头: ATG

基因末端:TAA、TGA 或 TAG

如果开头和结尾之间至少有一个三联体(例如 TAA ATG)不是有效基因,则认为该基因有效

文本文件示例,文本文件可以有多行

ATG GCA TAT ATG TGG AAG TAA GTT GTA ATG CAC GAT GGC AAC GGC GGC TAG CCA ATG AAA

这个例子包含两个基因

到目前为止我已经尝试过,不知道如何找到开头和结尾。

 int Count (char *file) {   
FILE *ptr = NULL;
int count = 0;

char *start = "ATG";
char *end = "TAA"; // miss TGA, TAG

char chr;
int occur, i;

ptr = fopen(filename, "r"); //open text file

if (ptr == NULL)
return -1;

chr = fgetc(ptr);
while(chr != EOF){

if(ch == start[0]){
for(i=1; i< StrLen(start); i++){
chr = fgetc(ptr);

if(chr == EOF){
occur = 0;
break;
}
else if(chr != start[i]){
chr = fgetc(ptr);
occur = 0;
break;
}
else
occur = 1;
}

if(occur == 1){
count++;
}

} else{
chr = fgetc(ptr);
}
}

if (!feof(ptr)){
return -1;
}
fclose(ptr);

return count;
}

int StrLen(char *word){
int i = 0;
char c = word[0];
while(c != '\0'){
i++;
c = word[i];
}
return i;
}

请帮帮我! :)

最佳答案

尝试从更高的层面来看待你的问题。您想要找到由三联体序列组成的基因。为此,您必须读取三联体并测试它是基因的开始还是结束还是介于两者之间。

所以,这可能看起来像这样:

char triplet[4];
while (read_triplet(fp, triplet)) {
if (is_beginning(triplet)) {
/* handle beginning */
} else if (is_end(triplet)) {
/* handle end of gene */
} else {
/* is between */
}
}

然后定义用于三元组处理的函数:

int read_triplet(FILE *fp, char *triplet) { /* ... */ }
int is_beginning(const char *triplet) { return strcmp(triplet, "ATG") == 0; }
int is_end(const char *triplet)
{
if (strcmp(triplet, "TAA") == 0)
return 1;

if (strcmp(triplet, "TGA") == 0)
return 1;

if (strcmp(triplet, "TAG") == 0)
return 1;

/* No, it's not an end triplet */
return 0;
}

希望这有助于开始。

关于用C计算文本文件中完整基因的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13016342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com