作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用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/
以下问题专门针对生物技术应用,但可以说明其他领域类似问题的一般原则。这是一个 NP 难问题,可能与旅行商问题有关,我很好奇可以使用哪些算法来得出解决方案。 生物背景简介:蛋白质由 20 种氨基酸组成。
我是一名优秀的程序员,十分优秀!