我正在编写一个只计算DNA的“互补”链的函数,意味着将G替换为G,将T替换为A,依此类推。
这就是我写的:
#include <stdio.h>
#include <string.h>
#define SIZE 70
int isLegitSequence(char sequence[]);
void getComplementaryStrand(char complementary[],char sequence[]);
int findSubSequence(char sequence[],char subsequence[]);
int findSubComplementary(char sequence[],char subcomplementary[]);
void cutSequence(char sequence[],char tocut[]);
void checkDNAList(char data[][SIZE],int rows,char sequence[]);
void main(){
char dnaSequence[SIZE];
char compDnaSequence[SIZE];
printf("Enter a DNA Strand\n");
gets(dnaSequence);
printf("%d\n",isLegitSequence(dnaSequence));
getComplementaryStrand(compDnaSequence,dnaSequence);
puts(compDnaSequence);
}
int isLegitSequence(char sequence[]){
int i=0;
while (sequence[i]){
if(sequence[i]=='A'||sequence[i]=='C'||sequence[i]=='G'||sequence[i]=='T');
else return 0;
i++;
}
return 1;
}
void getComplementaryStrand(char complementary[SIZE],char sequence[SIZE]){
int j=strlen(sequence)-1,i;
for(i=0;sequence[i];i++,j--){
if(sequence[i]=='A') sequence[j]='T';
else if(sequence[i]=='C') sequence[j]='G';
else if(sequence[i]=='G') sequence[j]='C';
else sequence[j]='A';
}
complementary[strlen(sequence)]='\0';
}
但是,这是我运行程序时得到的结果:
Enter a DNA Strand
CGCTC
1
╠╠╠╠╠
Press any key to continue . . .
这是我第一次使用函数,所以我不确定我在这里做错了什么。 会感激帮助,但在我的理解范围内,即非常非常基本。
答案 0 :(得分:2)
您需要在调用函数的源文件的顶部添加函数getComplementaryStrand
的原型。
在源文件的顶部添加以下行:
void getComplementaryStrand(char complementary[SIZE],char sequence[SIZE]);
编辑:问题在此期间发生了变化......在编译错误之前。 OP请提出一个新问题,而不是用新问题编辑原始问题。
答案 1 :(得分:1)
在getComplementaryStrand()
中,除了结束字符外,你永远不会在补充字符串中填充任何内容。所以你得到了垃圾。
答案 2 :(得分:1)
在getComplementaryStrand()
函数中仔细查看for循环。您是否将值分配给正确的字符串?我想不是。